Действительно ли возможно назвать метод на типе, который Вы передаете в свой общий метод?

  1. Это легко (ab) используется в качестве глобальной переменной.
  2. Классы, которые зависят от одиночных элементов, относительно более тверды к модульному тесту в изоляции.
5
задан GEOCHET 13 July 2009 в 17:50
поделиться

3 ответа

Вы можете, если есть какой-то тип, ограничивающий T:

public int SomeMethod(T t) where T : ISomeInterface
{
    // ...
}

public interface ISomeInterface
{
    int Age { get; }
}

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

(В C # 4 вы можете использовать динамическую типизацию, но я бы не стал этого делать, если только это не была особо «особая» ситуация, которая действительно оправдывала это. )

19
ответ дан 18 December 2019 в 05:40
поделиться

Развертывание ответа Джона.

Еще один способ - использовать функциональный подход к проблеме.

public int SomeMethod(T t, Func<T,int> getAge) {
  int blah = getAge(t);
  ...
}
9
ответ дан 18 December 2019 в 05:40
поделиться

Как насчет:

public class Blah
{
  public int SomeMethod(Func<int> get_age)
  {
    int blah = get_age();
    return blah;
  }
}
3
ответ дан 18 December 2019 в 05:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: