Понять язык c# (да и вообще ООП, наверное)?

Приветствую.


Есть класс (А) и вложенный внутри него публичный класс (В).


Почему (?) мы можем объявить объект экземпляра вложенного класс (В) вот так:


new A.B()


Класс В не является статичным же.

И почему (?) мы не можем его определить вот так:


A a = new A();

new a.B();


Поведение такое как будто класс В статичный, но это не так.


Я могу просто смириться с этим, но хочется понять до конца почему так происходит.


И еще один вопрос вдогонку.

Для чего нужны статичные классы? Наследовать и создавать объекты нельзя же.

Это экзотическая альтернатива неймспейсов? Что можно с ними делать?


И еще еще один вопрос:

Операция «as» эквивалентна приведению типа через скобки перед объектом?


Спасибо.
  • Вопрос задан
  • 3603 просмотра
Решения вопроса 1
szKarlen
@szKarlen
Почему (?) мы можем объявить объект экземпляра вложенного класс (В) вот так:

new A.B()

Класс В не является статичным же.
И почему (?) мы не можем его определить вот так:

A a = new A();
new a.B();

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

>Для чего нужны статичные классы? Наследовать и создавать объекты нельзя же.
Это экзотическая альтернатива неймспейсов? Что можно с ними делать?

они необходимы при создании, например, Extension Methods.
public static class MyExtensionProvider
{
public static void DoSomething(this Object targetObject)
{
return;
}
}


про оператор as уже ответили.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@tac
Боюсь все это к ООП не относится. Статические классы и вложенные классы — это пережиток других концепций, но не ООП.
Ответ написан
Комментировать
Класс B является «свойством» класса A, а не экземпляров этого класса. Это просто по логике — класс сущность декларативная, метаданные, используется на этапе компиляции, а не в рантайме. А C# язык статический.
Ответ написан
Комментировать
@AM5800
Статические классы нужны для объединения глобальных объектов/функций. В частности, часто применяются для создания классов-утилит (Например, для какой-то хитрой печати списка чего-то).

Операция as не совсем эквивалентна приведению через скобочки.
Если каст не удастся — вариант со скобочками сгенерирует исключение.
Тогда как вариант с as — просто вернет null
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы