【发布时间】:2010-08-02 14:35:56
【问题描述】:
有没有办法覆盖抽象类的方法签名,它使用 <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 传递它
【问题讨论】:
-
为什么需要指定
ref?无论如何,它几乎可以肯定是一个参考对象。见仁见智,但我会说ref是不好的形式。 -
这不是 ref 的意思... ref 表示正在传递实际的引用。因此,如果他将 _object 的值更改为不同的对象,它将反映在 _object 的调用者引用中。但在这种情况下,我看不出他这样做的任何理由。
-
我是通过引用传递的,因为 _service 是 WCF 服务,它会根据数据库输入/输出更改对象属性。
-
@Brian Right;目的似乎是确保调用者的引用由该方法更新,当传递一个值对象时会这样做(也是一个有效的,如果不漂亮,使用
ref)。 -
是的,当我在 WCF 服务器上更新它时,我想确保调用者对变量的引用已更新。我并没有真正使用 ref 太多,我唯一一次是在一个用 VB 完成的项目中。如果您知道更好的方法,请告诉我:)
标签: overriding type-conversion method-signature