在泛型类中指定类型类的c#调用方法
本文关键字:调用 方法 类型 泛型类 | 更新日期: 2023-09-27 18:18:55
在我看来,这个例子Animal<Cat> animal = new Animal<Cat>()
是误导。这个泛型类应该是另一个类的包装器。Wrapper<Type> wrapper = new Wrapper<Type>
和我想调用一个方法,是定义在类型类使用包装器引用。
GetType()
仅用于反映类。Animal决定如何使用Cat类;例如,如果Animal被定义为:
public class Animal<T>
{
public T Object { get; set; }
}
你可以通过:
引用它Animal<Cat> animal = new Animal<Cat>();
animal.Object.Meow();
Cat类必须具有相同的基类或实现相同的接口。理想情况下,约束也可以在Animal类定义中的where子句中指定。然后你可以调用基类或接口中的任何东西。这就是泛型的工作原理。
既然,你正在做泛型,我想你正在寻找的方法不仅在Cat
中,而且在其他类中。
因此,我将为该方法创建一个接口
public interface Walker {
void Walk();
}
然后让你所有的类实现那个方法:
public class Cat implements Walker {
public void Walk() {
//Do Something..
}
}
public class Dog implements Walker {
public void Walk() {
//Do Something..
}
}
那么,在你的Animal
定义中,你会有这样的东西:
public class Animal<SomeAnimal> where SomeAnimal : Walker, new() {
//...
}
然后从你的Animal
类,你可以实例化一个新的SomeAnimal
,并调用Walk
方法:
public void Walk() {
SomeAnimal animal = new SomeAnimal();
animal.Walk();
}
或者,您可以在类定义中省略new
约束,并通过属性设置Walker
实例:
public class Animal<SomeAnimal> where SomeAnimal : Walker {
public SomeAnimal Animal { set; }
public void Walk() {
Animal.Walk();
}
}