C# наследование констант !?

Давайте поговорим о наследовании в языке C#.

А именно, обсудим часто задаваемый вопрос "наследуются-ли константы в C#".

Они наследуются, но доступ к ним осуществляется не явно, через имя класса, но никак не через экземпляр класса.
То есть, допустим, Вы создали класс Test_class и определили в нем public константу some_const.

Код:

class Test_class

{

   public const string some_const = "this is const public text";

}

 

А теперь, давайте сделаем производный класс от Test_class.

Код:

class Sub_class : Test_class

{

 

}

 

Ну вот, теперь у нас есть два класса, в первом объявлена public переменная, а во втором ничего не объявлено.

Итак, если Вы попытаетесь вызвать унаследованную константу some_const с помощью экземпляра класса Test_class или Sub_class, произойдет ошибка, сообщающая о том, что такое свойство/поле отсутствует.

Код:

Test_class first_ex = new Test_class();

Sub_class second_ex = new Sub_class();

Console.WriteLn("First ex : " + first_ex.some_const);

Console.WriteLn("Second ex : " + second_ex.some_const);

 

Такой код выдаст ошибку.

Но, почему же константа не наследуется?

Все очень просто, на самом деле, константа котируется в C# не как простое свойство/поле, а как статическое(static).

Соответсвенно, доступ к константе может осуществляться только через имя класса, в котором эта константа объявлена, или унаследована.

Хватит слов, представим код:

Код:

Test_class first_ex = new Test_class();

Sub_class second_ex = new Sub_class();

Console.WriteLn("First ex : " + Test_class.some_const);

Console.WriteLn("Second ex : " + Sub_class.some_const);

 

Разницы между 3 и 4 строчками нет, они обе обращаются к одной и той же константе.

Кстати, если объявить константу директивой private, то в унаследованных классах доступ к ней по имени класса не получить.

Также, если объявить ее с директивой protected, то в унаследованных классах доступ к ней можно будет получить только внутри производного класса.

 

Ну вот, теперь Вы знаете ответ на столь популярный вопрос C# наследование константы.

Константы наследуются статично, и к ним применимы все уровни доступа :)

 

С Вами был Прайлер, удачи и приятного кодинга !)

 C# кодинг   11336     0  15  16.05.2014
 Нравится?
 Расскажи друзьям
 Комментарии