пятница, 18 мая 2012 г.

.NET C# - Multicast Delegates (Part 1)

Все делегаты в C# наследуются от MulticastDelegate класса (который в свою очередь наследуется от базового класса делегатов Delegate). MulticastDelegate содержит в себе массив объектов Delegate. Это означает то, что любой делегат может содержать в себе ссылки на множество методов. Для того чтобы получить список всех методов в каком-либо объекте делегата, необходимо вызвать метод GetInvocationList(). Перейдем к примерам.

четверг, 17 мая 2012 г.

.NET C# - Отправка e-mail'а

Отправляем e-mail на примере яндекса. Необходимые классы находятся в System.Net.Mail.
static void SendEmail()
{
    MailAddress from = new MailAddress("addressFrom@yandex.ru", "Display Message", Encoding.UTF8);
    MailAddress to = new MailAddress("addressTo@yandex.ru");

    using (SmtpClient client = new SmtpClient(@"smtp.yandex.ru"))
       using(MailMessage message = new MailMessage(from, to))
       {
           client.Credentials = new NetworkCredential("userName", "userPassword");

           message.Body = "This is a test e-mail message sent by an application. ";
           message.Body += "Hello wanderer!";
           message.BodyEncoding = Encoding.UTF8;
           message.Subject = "Important note!";
           message.SubjectEncoding = Encoding.UTF8;

           // Optional
           //message.Attachments.Add(new Attachment("D:\\AwesomePicture.gif"));

           client.Send(message);
       }
} 

среда, 16 мая 2012 г.

.NET C# - Замыкания

Реализация замыканий в C# реализована таким образом, что при захвате внешней переменной (по отношению к анонимному методу) захватывается сама переменная, а не ее значение в момент непосредственного захвата. Пример:
static void Main()
{
      int num = 1;
      Action action = () => Console.WriteLine(num);
      num = 2;
      action(); // Outputs: 2
}