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>我不能由参传递
您应该使整个基类通用,而不是使方法本身通用.
例如:
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关键字.
有关更多信息,请参阅此处.
| 归档时间: |
|
| 查看次数: |
1454 次 |
| 最近记录: |