Я смотрел на this question, и это заставило меня задуматься.Перегружатели недвижимости
Всякий раз, когда я определить класс с авто свойствами,
// Example A
public class MyObject
{
public int MyInt { get; set; }
}
ЛТ-компилятор преобразует его в похожее на это:
// Example B
public class MyObject
{
private int _MyInt;
public int get_MyInt()
{
return _MyInt;
}
public void set_MyInt(int value)
{
_MyInt = value;
}
}
Таким образом, вы могли бы гипотетически написать что-то вроде следующего:
// Example C.1
public class MyObject
{
public int MyInt { get; set; }
public void set_MyInt(string value)
{
MyInt = int.Parse(value);
}
}
Возможно, что-то такое:
// Example C.2
public class MyObject
{
private int _myInt;
public int MyInt
{
get { return _myInt; }
set
{
_myInt = value;
}
set(string)
{
_myInt = int.Parse(value);
}
}
}
И эта функциональность существует без ошибок компилятора.
// Example D
public void DoSomething(string someIntegerAsAString)
{
var myObject = new MyObject()
{
MyInt = someIntegerAsAString
};
}
Что останавливает компилятор от высказывания код, такой как примере D, где желаемый результат выведенного и он работает правильно и ожидалось? Функциональность там, указанная в Пример B.
Это что-то противоречит тому, как языковые дизайнеры разработали язык для работы и поведения?
Ничто не останавливает вас в первом примере. Ошибки компиляции останавливают вас во втором. Перегруженные средства настройки свойств не поддерживаются. Вы могли бы просто использовать метод. Вероятно, есть некоторые экзотические способы злоупотреблять им, поэтому зачем тратить время, усилия и деньги на что-то очень редко? –
На самом деле вы можете выполнять перегрузку метода с помощью динамических привязок http://www.hanselman.com/blog/BackToBasicsC4MethodOverloadingAndDynamicTypes.aspx, невозможно с помощью свойства auto-IMPLEMENTED, но иногда это может помочь – Random
Возможный дубликат [Перегрузка свойств в C#] (https://stackoverflow.com/questions/2608892/overloading-properties-in-c-sharp) – DavidRR