我正在尝试在C#中使用AttachmentCollection类,当我尝试创建它的新实例时,它给出了一个错误,说“错误32类型'System.Net.Mail.AttachmentCollection'没有定义构造函数”....这是我正在尝试的,如果没有定义构造函数,如何创建一个新的实例?
AttachmentCollection attachmentCollection = new AttachmentCollection();
谢谢你的帮助!
某些类型不是为实例化而设计的。
它们可能是抽象的,这意味着您需要扩展类并填充其一些功能。
他们可能还需要一些大量工作才能正确创建它们。这些类型经常暴露公共静态方法或具有可用于实例化它们的工厂。
文档声明“AttachmentCollection类的实例由MailMessage.AlternateViews和MailMessage.Attachments属性返回。”好像设计师不希望你创建这个系列;其目的是仅与MailMessage类一起使用。
让MailMessage类为您处理其AttachmentCollections。创建MailMessage的实例,然后填写AlternateViews和Attachments,而不是创建集合,填写它,然后将其分配给属性。
最后一件事,大多数集合的公共属性都没有setter。它被认为是一种糟糕的设计,允许您的类型的用户能够设置甚至清空您的公共集合属性。
如果不使用反射,则无法创建它的新实例。
相反,您可以创建一个新的MailMessage“message = new MailMessage(...)”(创建它自己的AttachmentCollection),并调用“message.Attatchments.Add(...)”来添加附件。
AttachmentCollection的构造函数是内部的,它是一种只能从MailMessage中使用的类型。
请参阅AttachmentCollection的msdn文档。
我认为你没有正确使用AttachmentCollection。查看MSDN docs中的示例(基本上,您应该使用messages.Attachments.add(foo):
string file = "data.xls";
MailMessage message = new MailMessage(
"[email protected]",
"[email protected]",
"Quarterly data report.",
"See the attached spreadsheet.");
Attachment data = new Attachment(file, MediaTypeNames.Application.Octet);
// Add time stamp information for the file.
ContentDisposition disposition = data.ContentDisposition;
disposition.CreationDate = System.IO.File.GetCreationTime(file);
disposition.ModificationDate = System.IO.File.GetLastWriteTime(file);
disposition.ReadDate = System.IO.File.GetLastAccessTime(file);
// Add the file attachment to this e-mail message.
message.Attachments.Add(data);
当然这可能是一个糟糕的设计,但回答这个问题:
AttachmentCollection attachmentCollection = new MailMessage().Attachments;