Преобразуване [Програмиране]
Имаме клас с няколко конструктора:
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)
1 Коментари:
Дъъъъ...
Господи.
Изпращане на Коментар
<< Начална страница