powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Порядок инициализации конструкторов в c#
14 сообщений из 39, страница 2 из 2
Порядок инициализации конструкторов в c#
    #39511362
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRСон Веры Павловны,
наверное это был какой-нить MyTrick.Math (а не System.Math)?
В том-то и дело, что самый что ни на есть System.Math:
Код: c#
1.
2.
3.
4.
var allocate = typeof(RuntimeTypeHandle).GetMethod("Allocate", BindingFlags.NonPublic | BindingFlags.Static);
var math = allocate.Invoke(null, new[] { typeof(System.Math) });
Console.WriteLine(math.GetType()); // System.Math
Console.WriteLine(math is System.Math); // True
...
Рейтинг: 0 / 0
Порядок инициализации конструкторов в c#
    #39511400
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныВ том-то и дело, что самый что ни на есть System.Math
Охренеть... это ж сколько пива можно наспорить)))
...
Рейтинг: 0 / 0
Порядок инициализации конструкторов в c#
    #39511408
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRОхренеть... это ж сколько пива можно наспорить)))

Вообще-т до версии 2.0 в C# не было статических классов. Так что ничего удивительного, это просто атрибуты.
...
Рейтинг: 0 / 0
Порядок инициализации конструкторов в c#
    #39511446
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttТак что ничего удивительного, это просто атрибуты
Какие же атрибуты? Статические классы на уровне IL объявляются одновременно как abstract и sealed.
...
Рейтинг: 0 / 0
Порядок инициализации конструкторов в c#
    #39511578
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныКакие же атрибуты? Статические классы на уровне IL объявляются одновременно как abstract и sealed.

про них и говорю :)
насколько я понял, так сделано для языков, которые не поддерживают статические классы.
...
Рейтинг: 0 / 0
Порядок инициализации конструкторов в c#
    #39511581
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Порядок инициализации конструкторов в c#
    #39512115
stut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот повернемся к нашим конструкторам. Вопрос возник из комбинации создание таких обьектов. Класа А, В и 1) A a= new B(); 2) B b=new A(); В первом варианте у меня результат что и в B b=new B(); То есть динамический полиморфизм - все одинаково и для статических класов. Во втором случае возникает ошибка компиляции. Однако если сделать приведение базового обьекта А к потомку В - создается обьект класа A?? new B= (B) new A(); Интересный результат - кастим к В, получаем А. Вообще на практике не предполагал возможности такого приведения, в базовом класе ведь нету всех полей и свойств производного класа - или это лиш механизм обхода ошибки компиляции, и приведением типа это не называется. Не могу вот сейчас проверить что будет если: А а=new A(); B b= (B)a;
...
Рейтинг: 0 / 0
Порядок инициализации конструкторов в c#
    #39512139
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stutНе могу вот сейчас проверить что будет если: А а=new A(); B b= (B)a;
Ну так проверь сначала, потом фантазируй.
Откомпилируется, т.к. проверка идет во время выполнения. Получишь исключение System.InvalidCastException
...
Рейтинг: 0 / 0
Порядок инициализации конструкторов в c#
    #39512152
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы до исключения не доводить используй is или as для приведения.
...
Рейтинг: 0 / 0
Порядок инициализации конструкторов в c#
    #39512180
stut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То и дело понятно, что пример откомплируется - только непонятно почему эксепшн если при создание обьекта - В b = (В) nеw А ошибок нету; Здесь что происходит? Какой то алогизм - кастим к В, получаем А. Говоря о is, аs - есть еще typеof, и linq имеет свой oftypе() - вот действительно такое многообразие вносит путаницу.
...
Рейтинг: 0 / 0
Порядок инициализации конструкторов в c#
    #39512185
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stutнепонятно почему эксепшн если при создание обьекта - В b = (В) nеw А ошибок нету; Здесь что происходит?
Тут тоже будет System.InvalidCastException
...
Рейтинг: 0 / 0
Порядок инициализации конструкторов в c#
    #39512230
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stutГоворя о is, аs - есть еще typеof, и linq имеет свой oftypе() - вот действительно такое многообразие вносит путаницу.
Путаницу вносит исключительно путаница в голове. Всё вышеперечисленное - четыре абсолютно разных вещи.
...
Рейтинг: 0 / 0
Порядок инициализации конструкторов в c#
    #39512235
stut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну как будет эксепшн приведения типа если я проверял/ запускал такой код. Может я мало проверял, как меня здесь закинули что я не проверял вообще, но результат удивил меня самого.
...
Рейтинг: 0 / 0
Порядок инициализации конструкторов в c#
    #39512238
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stutНу как будет эксепшн приведения типа если я проверял/ запускал такой код. Может я мало проверял, как меня здесь закинули что я не проверял вообще, но результат удивил меня самого.
Покажи код.
У меня исключение
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
namespace ConsoleApplication1
{
	class A {
		public static int x;

		static A() {
			Console.WriteLine("static A()");
		}

		public A() {
			Console.WriteLine("A()");
		}
	}


	class B : A {
		static B() {
			x = 0;
			Console.WriteLine("static B()");
		}

		public B() {
			Console.WriteLine("B()");
		}
	}

    class Program
    {
        static void Main()
        {
			B b= (B)new A();
        }
    }
}

...
Рейтинг: 0 / 0
14 сообщений из 39, страница 2 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Порядок инициализации конструкторов в c#
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]