在我看来,这个例子Animal<Cat> animal = new Animal<Cat>()
具有误导性。这个泛型类应该是另一个类的包装器。
Wrapper<Type> wrapper = new Wrapper<Type>
我希望使用包装器引用调用Type类中定义的方法。
答案 0 :(得分:1)
GetType()
仅用于反映课程。动物确定如何使用Cat类;例如,如果将Animal定义为:
public class Animal<T>
{
public T Object { get; set; }
}
您可以通过以下方式参考:
Animal<Cat> animal = new Animal<Cat>();
animal.Object.Meow();
动物揭示泛型类型的全部内容。
答案 1 :(得分:0)
Cat类必须具有相同的基础或实现相同的接口。理想情况下,约束也将在Animal类定义的where子句中指定。然后你可以调用基类或接口中的任何东西。这是仿制药的工作原理。
答案 2 :(得分:0)
因为你正在做泛型,我想你所寻找的方法不仅仅在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();
}
}