C# - 使用ClassName覆盖<T>方法签名?

Rac*_*hel 1 overriding type-conversion method-signature

有没有办法覆盖使用<T>ClassName 的抽象类的方法签名,所以我可以通过引用传递一个对象而不重新编写它?

例如,我有一堆对象管理器.我希望它们都包含一个.Save(Object)方法,该方法将根据对象状态(插入,更新,删除等)执行相应的保存操作.

我试图创建一个包含以下方法的基类:

protected virtual bool Update<T>(ref T _object) where T : ObjectBase
{
    throw new NotImplementedException();
}

public virtual bool Save<T>(ref T _object) where T : ObjectBase
{ 
    // Figure out which action to take based on _object's state and execute it
}
Run Code Online (Sandbox Code Playgroud)

我希望我继承的类使用类似的东西来定义方法:

public override bool Update<Consumer>(ref Consumer _object)
{
    return _service.UpdateConsumer(ref _object);
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,我不能指定<T>现在会<Consumer>,并保持它在<T>我不能由参传递

SLa*_*aks 6

您应该使整个基类通用,而不是使方法本身通用.

例如:

public abstract class ObjectManager<T> where T : ObjectBase {
    protected abstract bool Update(T obj);
}
Run Code Online (Sandbox Code Playgroud)

每个具体的ObjectManager都应该继承ObjectManager它管理的类型,如下所示:

public class ConsumerManager : ObjectManager<Consumer> {
    protected override bool Update(Consumer obj) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

顺便提一下,请注意,您的参数几乎肯定不会被传递ref.如果要更改调用者的变量以引用其他实例,
则只需要ref关键字. 有关更多信息,请参阅此处.