1

有没有办法覆盖<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
}

我希望我继承的类使用这样的方法来定义方法:

public override bool Update<Consumer>(ref Consumer _object)
{
    return _service.UpdateConsumer(ref _object);
}

我的问题是我无法指定<T>现在将是<Consumer>,并且通过将其保持在<T>我无法通过 ref 传递它

4

1 回答 1

6

与其使方法本身通用,不如使整个基类通用。

例如:

public abstract class ObjectManager<T> where T : ObjectBase {
    protected abstract bool Update(T obj);
}

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

public class ConsumerManager : ObjectManager<Consumer> {
    protected override bool Update(Consumer obj) {
        ...
    }
}

请注意,顺便说一句,您的参数几乎绝对不应该被传递ref。如果您想更改调用者的变量以引用不同的实例
, 您只需要关键字。 有关详细信息,请参阅此处ref

于 2010-08-02T14:38:14.050 回答