Cneric调用Generic类中指定的类型类的方法

时间:2014-08-20 15:45:51

标签: c#

在我看来,这个例子Animal<Cat> animal = new Animal<Cat>()具有误导性。这个泛型类应该是另一个类的包装器。 Wrapper<Type> wrapper = new Wrapper<Type>我希望使用包装器引用调用Type类中定义的方法。

3 个答案:

答案 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();
    }

}