powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Вопрос о статических методах и конструкторе
6 сообщений из 6, страница 1 из 1
Вопрос о статических методах и конструкторе
    #38298618
Thor234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Ребята подскажите такую вещь: есть класс А и его наследник класс Б. Нужно реазизовать статический метод в классе А который будет создавать и возвращать экземпляр вызывающего класса, т.е. вызываем в классе А статический метод GetObject -получаем экземпляр А класса, вызываем в Б - экземпляр Б класса
public ClassA
{
...
public static ClassA GetObject(param)
{
//something
return new ???
}
}
...
Рейтинг: 0 / 0
Вопрос о статических методах и конструкторе
    #38298638
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не выйдет
...
Рейтинг: 0 / 0
Вопрос о статических методах и конструкторе
    #38308161
taj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если в контексте вызова известен тип, инстанс которого нужно вернуть - ну передай этот тип в числе параметров.
Что-нить по мотивам
private static T GetInstance<T>(Type t, params object[] param)
{
return (T)Activator.CreateInstance(t, param);
}

Но вообще, а зачем это может быть нужно - получение в классе нового экземпляра того же класса, причем так, что логику хочется вынести в родителя?

Может быть почитать про концепцию, фабрики, возвращающей интерфейс.
...
Рейтинг: 0 / 0
Вопрос о статических методах и конструкторе
    #38308298
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не получится, в стектрейсе даже информации по ClassB не будет, только базовый ClassA.

Можно вот так провернуть через нестатические методы (обязательно нужен override, тогда в стектрейсе можно выкурить наследуемый тип через первый фрейм). Но за такой код, конечно, нужно плеткой по губам отстёгивать...

Код: 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.
public class ClassA
{
    public virtual object GetObject()
    {
        var type = new StackTrace(0).GetFrame(1).GetMethod().DeclaringType;
        return Activator.CreateInstance(type == typeof(Program) ? typeof(ClassA) : type);
    }
}

public class ClassB : ClassA
{
    public override object GetObject()
    {
        return base.GetObject();
    }
}

public class ClassC : ClassA
{
    public override object GetObject()
    {
        return base.GetObject();
    }
}
...
Рейтинг: 0 / 0
Вопрос о статических методах и конструкторе
    #38308331
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУобязательно нужен override, тогда в стектрейсе можно выкурить наследуемый тип через первый фреймОга, и тут пришел инлайнинг.

Код: plaintext
[MethodImpl(MethodImplOptions.NoInlining)]
...
Рейтинг: 0 / 0
Вопрос о статических методах и конструкторе
    #38308341
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучМСУобязательно нужен override, тогда в стектрейсе можно выкурить наследуемый тип через первый фреймОга, и тут пришел инлайнинг.
Код: plaintext
[MethodImpl(MethodImplOptions.NoInlining)]

Бум-кабум, и снова неработающий код в сети.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Вопрос о статических методах и конструкторе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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