Jan*_*n S 5 c# generics inheritance this
我在C#中的类型化方法有问题。我想调用对象的继承方法。该方法调用以“ this”为参数的静态方法。静态方法的参数是通用的。现在,我希望此参数的通用类型是第一个对象的类型。但是参数始终具有抽象类的类型。
这是示例:
abstract class AbstractClass
{
bool update()
{
Connection.Update(this);
}
}
class Entity : AbstractClass
{
}
class Connection
{
public static void Update<T>(T obj)
{
someMethod<T>()
}
}
Run Code Online (Sandbox Code Playgroud)
如果我尝试这样做:
Entity foo = new Entity();
foo.update();
Run Code Online (Sandbox Code Playgroud)
Connection.Update将在调试器中如下所示:
public static void Update<AbstractClass>(AbstractClass obj)
{
someMethod<AbstractClass>()
}
Run Code Online (Sandbox Code Playgroud)
但是我想要这个:
public static void Update<Entity>(Entity obj)
{
someMethod<Entity>()
}
Run Code Online (Sandbox Code Playgroud)
有没有可能
someMethod<typeof(obj)>()
Run Code Online (Sandbox Code Playgroud)
还是要解决我的问题?
编译器尝试推断 T 参数的类型,在基类中它没有信息来推断实体类型。因此,当您想要调用 Update 函数时,您应该提供子类型的信息。@Alexandr 的答案是一个很好的答案,只是一种改进,向 T 类型参数添加类型约束以将其限制为 AbstractClass 的子级
abstract class AbstractClass<T>
where T: AbstractClass<T> //restrict T as a child of AbstractClass<T>
{
bool update()
{
Connection.Update<T>(this as T);
}
}
class Entity : AbstractClass<Entity>
{
}
class Connection
{
public static void Update<T>(T obj)
{
someMethod<T>()
}
}
Run Code Online (Sandbox Code Playgroud)