Именование свойств во время компиляции в универсальном классе - PullRequest
0 голосов
/ 21 апреля 2019

Я пытаюсь написать универсальный класс, передать ему некоторые типы и затем получить к нему доступ через свойства.

Я написал этот код:

class Factory<T1, T2> where T1 : Test, new()
                      where T2 : Test, new()
{
    public T1 FirstType { get; set; }
    public T2 SecondType { get; set; }

    public Factory() 
    {
        FirstType = new T1();
        SecondType = new T2();
    }
}

и я использую его следующим образом (OtherTest реализует Test):

Factory<Test, OtherTest> factory = new Factory<Test, OtherTest>();
factory.FirstType.MyMethod();

Тогда я могу использовать свойства FirstType и SecondType, однако, если я изменю порядок:

Factory<OtherTest, Test> factory2 = new Factory<OtherTest, Test>();

Это будет иметь другое поведение, поскольку FirstType будет OtherTest. Я хотел бы передавать экземпляры и иметь возможность писать код, подобный этому:

Factory<Test, OtherTest> factory = new Factory<Test, OtherTest>();
factory.Test.MyMethod();    //I want to generate properties named after class
factory.OtherTest.MyMethod();

Могу ли я сделать это во время компиляции?

1 Ответ

0 голосов
/ 21 апреля 2019

Вы не можете изменять имена свойств через параметры универсального типа.Самое близкое, что вы можете получить, - это словарь

Dictionary<string, Test> Tests;

. Затем вы можете использовать typeof(T1).Name и nameof для безопасного предоставления имен свойств.

Tests.Add(typeof(T1).Name, new T1());

Test test = Tests[nameof(FirstType)];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...