Можно использовать вычисляемые свойства, а не методы, если расчеты не занимают заметного времени
См. Рекомендации по использованию свойства
.
Если ваш метод должен принимать тип типа в качестве аргумента, я не думаю, что есть способ сделать это. Если у вас есть гибкость с вызовом метода, вы можете сделать: public void Foo (MyClass myClass) и получить Тип, вызвав .GetType ().
Чтобы немного расширить. System.Type - это тип аргумента, поэтому нет возможности указать, что следует передать. Так же, как метод, который принимает целое число от 1 до 10, должен принимать int, а затем во время выполнения проверять правильность соблюдения ограничений.
Если указать тип MyClass или производный от него, - это проверка значения самого аргумента. Это все равно, что сказать, что параметр приветствия в
void Foo(int hello) {...}
должен быть от 10 до 100. Невозможно проверить во время компиляции.
Вы должны использовать универсальные шаблоны или проверять тип во время выполнения, как и любая другая проверка значения параметра.
Вы можете использовать следующее:
public void Foo<T>(T variable) where T : MyClass
{ ... }
Вызов будет примерно таким:
{
...
Foo(someInstanceOfMyClass);
...
}
почему бы вам не использовать вместо
public void foo<t>();
?
Теоретически то, что вы хотите, можно сделать с помощью атрибутов. Но это намного яснее (imo) и делает то же самое:
public void Foo(MyClass m) {
Type t = m.GetType();
// ...
}
You can also use an extension method, which will be available for all objects convertible to MyClass:
public static class MyClassExtensions
{
public static void Foo(this MyClass obj)
{
// ...
}
}
And you can use it as if it were an ordinary method of an object:
var x = new MyClass();
x.Foo();