Все типы - производные от Sytem.Object У них есть публичные методы
- ToString
- Equals(object obj)
- GetHashCode()
- GetType() и protected методы
- MemberwiseClone
- Finalize
MemberwiseClone создает новый объект, в который копирует свойства исходного, для ссылочных типов происходит копирование указателя(ссылка не отвязывается) Finalize - вызывается сборщиком мусора при утилизации объекта(недетерминированно) Оператор new последовательно делает несколько вещей:
- Анализирует сколько понадобится памяти для этого объекта, выделяет память
- Анализирует сколько дополнительно понадобится памяти для этого объекта, выделяет эту память в виде байт, проинициализированных 0
- Создает указатель на объект и индекс блока синхронизации(вроде нужно CLR, для управления объектом)
- Вызывает конструктор
Можно привести к собственному типу или наследникам
public class A
{
}
public class B : A
{
}
...
B b = new B();
object o = b;
A a = (A) o;
Приведение происходит динамически,т.е вполне возможно, что будет ошибка Run-Time
Пространства имен используются для того, чтобы программисту было проще писать код, не весь путь к расположению класса, а открыть namespace тем самым компилятор сам подставит правильный путь, потому что в итоге CLR работает с полными именами типов, также using позволяет использовать псевдонимы:
using WintellectWidget = Wintellect.Widget;
...
var ww = new WintellectWidget();
Это может быть полезно, если я не хочу захламлять глобальное пространство имен лишними типами и мне нужен только один