2016-11-07 4 views
0

В C#: Можно ли использовать тип общего класса аргументов в качестве возвращаемого типа для методов или для определения членов?Тип вывода в C# generics, как в шаблонах C++?

C++ Пример:

class AgrumentClass 
{ 
    typedef int type; 
public: 
    static type GetSomething() { return 0; } 
}; 

template< class T > 
class GenericClass 
{ 
    typedef typename T::type type; 
public: 
    static type GetSomething() { return T::GetSomething(); } 
}; 

int main() 
{ 
    int value = GenericClass<AgrumentClass>::GetSomething(); 

    return value; 
} 
+0

Я голосующий, чтобы закрыть этот вопрос как не по теме, потому что это не инструмент преобразования кода! – mybirthname

+0

да, вы можете узнать C# generics, и вы можете использовать их почти везде https://msdn.microsoft.com/en-us/library/512aeb7t.aspx –

+5

@mybirthname Он не просит инструмент для преобразования кода. Он спрашивает, есть ли параллельная возможность в C#, и включая пример C++, чтобы показать концепцию, к которой он относится. –

ответ

0

Ваш пример как таковой не имеет чистый перевод на C#, потому что это делает предположение о методе, доступных на шаблонного типа. C# позволяет ограничить общий тип потомками или исполнителями определенного типа или интерфейса, но это насколько возможно. Если метод не может быть разрешен к типу во время компиляции, он не будет компилироваться.

+0

Есть ли «нечистый» способ его решить? – monotomy

+0

Я не думаю, что есть статические методы. Если я правильно помню, в C# статические методы не наследуются. –

+0

static не важен - я использовал статический только для того, чтобы сделать C++ пример максимально коротким и простым (без экземпляров объектов). – monotomy

Смежные вопросы