Выполнить функцию из неизвестного типа T - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть такой класс:

public class TestClass
{
    public int A { get; set; }
    public int B { get; set; }
    //Other stuff...

    public static static int TestFunction(int c, int d)
    {
         //Other stuff...
         return c + d;
    }
}

, и у меня есть много разных классов, подобных этому, с разными свойствами, но всегда с функцией "TestFunction" с другим содержанием (например, + / * /: / -).

Теперь я хочу создать другую функцию, которая вызывает эту функцию, не зная типа функции, но я знаю, что «Testfunction» всегда есть.

Вот моя попытка:

public static int AnotherFunction<T>(T inClass, int c, int d)
{
    //Other stuff...
    return inClass.TestFunction(c, d);
}

Функции предназначены для простого показа целей (просто не говорите «вызывайте функцию напрямую, потому что она мало что делает»).
Проблема в том, что Visual Studio говорит, что «TestFunction» неизвестна.
Как я могу это сделать, не зная, какой класс я получу?

1 Ответ

0 голосов
/ 22 ноября 2018

Вы можете создать интерфейс, а типы могут наследовать от него и предоставить собственную реализацию для них.

Затем вы можете ограничить свой метод для универсального параметра для этого типа интерфейса, чтобы все типы, наследуемые от него,может вызвать соответствующую реализацию.

См. следующее:

public interface IInterface
{
   int TestFunction(int c, int d);
}

public class TestClass : IInterface
{
    public int A { get; set; }
    public int B { get; set; }
    //Other stuff...

    public int TestFunction(int c, int d)
    {
         //Other stuff...
         return c + d;
    }
}

, и теперь вы можете написать метод, подобный:

public static int AnotherFunction<T>(T inClass, int c, int d) where T : IInterface
{
   //Other stuff...
   return inClass.TestFunction(c, d);
}

Надеюсь, это даст вам идею.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...