У мене є принципова проблема використання var.
У цьому прикладі все поруч, але проблема справді у великих рішеннях із спільними бібліотеками чи проектами.
Врахуйте це:
public MyFirstObject GetMeAnObject() {
return new MyFirstObject();
}
public void MainProgram() {
var theObject = GetMeAnObject();
theObject.PerformOperation();
}
Що станеться, якщо хтось інший змінить GetMeAnObject відповідно до їх потреб?
public MySecondObject GetMeAnObject() {
return new MySecondObject();
}
Метод MainProgram матиме велику червону помилку при .PerformOperation (). Що сталося? Раніше PerformOperation працював на відмінно. Ми дивимося на методи на об'єкті, і він просто безслідно зник. Це був останній раз, і нам потрібен цей метод. Ви можете довго переслідувати хвіст і намагаючись з'ясувати, чому, якщо MyFirstObject має метод, який називається PerformOperation, його зараз не можна побачити. Усі "знають", що GetMeAnObject повертає MyFirstObject, тому немає сенсу перевіряти це.
Якби ви явно набрали theObject, у вас буде помилка Invalid Cast на лінії, яка викликає GetMeAnObject, і було б сліпуче очевидно, що GetMeAnObject повертає тип, який не є тим, що ви очікуєте.
Коротше кажучи, явна декларація означає, що ви знаєте, що означають помилки. Недійсний склад означає, що ви очікували повернення одного типу та іншого типу. Непризнаний член означає, що член був невпізнаний.
??
оператора "null coalesce" після його пояснення, він не повинен бути дозволений поблизу виробничого коду.