Интересный прикол в C#. Нельзя объявить свойство с таким же именем. что и имя класса. Следующий код завершится ошибкой:
public class UniqueDiscCode
{
System.String _UniqueDiscCode;
public System.String UniqueDiscCode
{
get { return _UniqueDiscCode; }
set { _UniqueDiscCode = value; }
}
}
Но ведь с точки зрения IL кода проблем не должно быть, ведь имена свойств отличаются от имен классов. Да и следующий хак позвоялет легко обойти такое простое ограничение:
public class DiscCodeBase
{
System.String _UniqueDiscCode;
public System.String UniqueDiscCode
{
get { return _UniqueDiscCode; }
set { _UniqueDiscCode = value; }
}
}
public class UniqueDiscCode : DiscCodeBase
{
public void test() {
UniqueDiscCode = "";
}
}
Сначала я создал класс с префиксом Base, у которого есть свойство UniqueDiscCode, а потом создал класс UniqueDiscCode, который наследует одноименное свойство. И никаких проблем с конфликтом имен нет.
Возникает тогда вопрос - так почему же нельзя сразу же объявить свойство с таким же именем, что и класс? Видимо есть какая-то причина, но пока не понятно, в чем она заключается.
Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку пока еще никто не лайкал и ты можешь быть первым
имена членов не могут совпадать с типами, в которые они входят
Как-то пример у вас не очень удачный получился, не отражает он сути вопроса. "UniqueDiscCode" != "DiscCode" :). Но посыл ясен
Думаю это особенность c# компилятора, как и отсутствие глобальных переменных, и если писать на чистом CIL, то все можно. Более того скажу, что попробовал то же самое в f#, компилятор не ругает, все работает. Походу просто создателям C# такой код кажется не красивым и они решили запретить данную возможность.
А вот еще две не совсем очевидные вещи, о которых можно догадаться, но наверняка лучше проверить:
что будет выведено в консоль?
Я думаю это сделано чтоб не было двусмысленности и путаницы так как конструктор создаётся с таким же именем как и у класса.
Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.