2009-08-18 5 views
2

J'essaie d'utiliser la classe AttachmentCollection en C# et lorsque j'essaie de créer une nouvelle instance, cela me donne une erreur disant "Erreur 32 Le type 'System.Net.Mail.AttachmentCollection' n'a pas constructeurs définis ".... Voici ce que j'essayais, comment créer une nouvelle instance de ceci si aucun constructeur n'est défini?AttachmentCollection attachmentCollection in C#

AttachmentCollection attachmentCollection = new AttachmentCollection(); 

Merci pour votre aide.

+0

Désolé, je tapais trop vite là-bas, Comment puis-je créer une nouvelle instance d'un objet qui n'a pas de constructeur (s)? – Gabe

+0

Tout a un constructeur, il pourrait ne pas vous être accessible (ce qui signifie que vous ne pouvez pas l'instancier explicitement). – brien

Répondre

4

Certains types ne sont pas conçus pour être instancié

Ils pourraient être signification abstraite, Vous devrez peut-être étendre la classe et remplir certaines de ses fonctionnalités

Ils peuvent également nécessiter un travail important pour les créer correctement.Ces types exposent souvent des méthodes statiques publiques ou ont des usines que vous pouvez utiliser pour les instancier

Les documents indiquent que «les instances de la classe AttachmentCollection sont renvoyées par les propriétés MailMessage.AlternateViews et MailMessage.Attachments». Il semble que les concepteurs ne voulaient pas que vous créiez cette collection; Son but est d'être utilisé uniquement avec la classe MailMessage.

Laissez la classe MailMessage gérer ses AttachmentCollections pour vous. Créez une instance de MailMessage, puis remplissez AlternateViews et pièces jointes, plutôt que de créer la collection, remplissez-la puis affectez-la aux propriétés. Une dernière chose, la plupart des propriétés publiques qui sont des collections n'ont pas de setters. Son considéré comme un mauvais design pour permettre aux utilisateurs de vos types d'être en mesure de définir ou même annuler vos propriétés de collection publique.

4

Vous ne pouvez pas créer une nouvelle instance sans utiliser de réflexion. Au lieu de cela, vous pouvez créer un nouveau MailMessage "message = new MailMessage (...)" (qui crée son propre AttachmentCollection), et appeler "message.Attachments.Add (...)" pour ajouter une pièce jointe.

Le constructeur de AttachmentCollection est interne, c'est un type conçu pour être uniquement utilisé à partir de MailMessage.

Voir les documents msdn pour AttachmentCollection.

3

Je ne pense pas que vous utilisiez AttachmentCollection correctement. Consultez l'exemple de la MSDN docs (essentiellement, vous devez utiliser 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); 
0

Bien sûr cela pourrait être une mauvaise conception, mais pour répondre à la question courte:

AttachmentCollection attachmentCollection = new MailMessage().Attachments;