2015-05-31 5 views
1

Скажем, у меня есть 3 класса: A, B и C. Каждый из этих классов имеет метод GetValue(), который возвращает int. Я хочу создать этот метод:Как ограничить типы параметров в общих методах

int GetTotalValue<T,R>(T c1, R c2) 
{ 
    return c1.GetValue() + c2.GetValue() 
} 

Очевидно, что это не сработает. Поскольку не все типы параметров имеют метод GetValue(). Так как ограничить типы параметров T и R, поэтому они должны иметь GetValue() метод (который возвращает int)

ответ

2

ли все три реализовать интерфейс, который содержит метод GetValue и ограничить метод, используя только те типы ,

public interface IGetValue 
{ 
    int GetValue(); 
} 

public class A : IGetValue // Same for B and C 
{ 
    ... 
} 

Тогда, наконец:

int GetTotalValue<T,R>(T c1, R c2) where T : IGetValue, R : IGetValue 
{ 
    return c1.GetValue() + c2.GetValue(); 
} 

UPDATE

Как Алекс указывает на его комментарии, этот метод не должен быть универсальным, хотя, это может быть переписано:

int GetTotalValue(IGetValue c1, IGetValue c2) 
{ 
    return c1.GetValue() + c2.GetValue(); 
} 
+3

Возможно, вы захотите добавить к своему ответу, что с этим общим ограничением, для метода выборки, используемого в вопросе ОП, общий метод не имеет смысла. Он мог бы просто использовать 'int GetTotalValue (IGetValue c1, IGetValue c2)'. – Alex

+0

@Alex, очень хороший пункт. Я обновил ответ, чтобы это отразить. –

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