0

我有这个基类:

public abstract class Parent {
    public void DoSomething() {
        var c=new GenericClass<**ThisInstanceType**>();
        c.DoYourThing();
    }
}

为了使用具有“this”类型(当前子实例)的泛型, 我应该用什么代替ThisInstanceType ?

我无法更改Parent.DoSomething(). 不可能void DoSomething<T>()

4

3 回答 3

1

如果你让你的抽象类通用,你可以像这样实现它:

public abstract class Parent<T> where T : Parent<T> {
    public void DoSomething() {
        var c = new GenericClass<T>();
        c.DoYourThing();
    }
 }

public class Child : Parent<Child> {}
于 2012-07-10T21:00:08.953 回答
0

你可以这样做:

public abstract class Parent<T> : IParent
{
    public void DoSomething() {
        var c=new GenericClass<T>();
        c.DoYourThing();
    }
}

public sealed class Child : Parent<Child>
{
}

如有必要,您可以添加:

公共接口 IParent { void DoSomething(); }

顺便说一句:如果你包括完整的现实生活示例,我可能会给你一个更好的解决方案

另一种解决方案是使用反射来获取正确的类型并在运行时调用该方法......

于 2012-07-10T21:05:35.697 回答
0

如果你真的不能正确设计它,你可以通过反射来做。我不愿建议,因为您确实应该重新设计您的界面,但是:

Type t = typeof(GenericClass<>).MakeGenericType(this.GetType());
object c = Activator.CreateInstance(t);
c.InvokeMember("DoYourThing", BindingFlags.Public | BindingFlags.Instance | BindingFlags.InvokeMethod, null, c, new object[] {});
于 2012-07-10T21:06:53.200 回答