Send via SMS

Петък, Април 15, 2005

Преобразуване [Програмиране]

Имаме клас с няколко конструктора:
public ImageArea(string imagePath) : this(Image.FromFile(imagePath))
{}

public ImageArea(Image image)
{
    this.Image = image;

    // Друг код... 
}
Дотук всичко е наред... Какво става ако искаме да добавим още един конструктор, който не приема параметри? Нека разгледаме следните “случаи”:
  • public ImageArea()
    {
      // Друг код 
    }
    Този подход, обаче води до повторение на код и следователно не може да бъде оптималното решение...
  • public ImageArea() : this(null)
    {}
    Тук проблемът е, че компилаторът не знае кой от конструкторите да ползва -- този с параметър string(тъй като низовете са reference тип) или с Image, и няма да компилира кода.
  • public ImageArea() : this(string.Empty)
    {}
    Това, разбира се отпада по обясними причини :-)
  • public ImageArea() : this((Image)null)
    {}
    Това е решението -- преобразуваме null към Image. Един поглед в генерирания MSIL подсказва, че сме на прав път.
    L_0002: call instance void ImageArea::.ctor([System.Drawing]System.Drawing.Image)
    
Нищо особено. Просто днес за пръв път ми дойде идеята за експлицитно преобразуване на null към определен клас и реших да споделя -- ей така за протокола дето се вика...

1 Коментари:

At 12:01 AM, Anonymous каза...

Дъъъъ...
Господи.

 

Изпращане на Коментар

<< Начална страница

*