基于已经实例化的

时间:2016-12-12 18:47:24

标签: c#

我有一个类似的方法:

public void DoSomething<T>() where T : BaseClass

我用作:

DoSomething<MyClass>();

我的问题是:我已将实例化的类存储在变量中,我想用它来调用此方法。

例: 我有一个变量来存储类;

BaseClass instantiated;

在某些时候,我实例化

instantiated = new MyClass(); //Inherits from BaseClass

在另一个时间,我需要调用该方法,但我所拥有的只是&#34;实例化&#34;变量。我在方法&#;&lt;&gt;?

中输入了什么
DoSomething<?>();

1 个答案:

答案 0 :(得分:2)

通用方法让我们有一个自定义的返回类型。由于您没有使用它,即您的返回类型为void,因此它实际上根本不需要是通用方法:

public void DoSomething(BaseClass myInstance){

    // Instance it and cast to a BaseClass:
    BaseClass obj=(BaseClass)Activator.CreateInstance(myInstance.GetType(),param1,param2);

    // Do anything else with obj.

}

正如你所说,你已经有了一个现有的对象,那就像这样被称为:

DoSomething(thatObject);

或者 - 这是更常见的形式 - 定义虚拟Clone()方法:

public class BaseClass{

 public virtual BaseClass Clone(){

   return new BaseClass();

 }

}

public class MyClass : BaseClass{

 public override BaseClass Clone(){

   return new MyClass();

 }

}

...

BaseClass myClone=thatObject.Clone();

如果我们返回新创建的对象,那么这有点不同。它可以很好地利用泛型:

public T DoSomething<T>() where T:BaseClass{

    // Instance it and cast to T:
    T obj=(T)Activator.CreateInstance(typeof(T),param1,param2);

    // Do anything else with obj.

    return obj;
}

我们这样打电话:

MyClass myClass=DoSomething<MyClass>();

这不能用运行时已知类型完成,因为那时返回类型也是未知的。

Here's an example最后一个在行动中。