在泛型类中指定类型类的c#调用方法

本文关键字:调用 方法 类型 泛型类 | 更新日期: 2023-09-27 18:18:55

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

在泛型类中指定类型类的c#调用方法

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