将实例的克隆分配给基接口

ali*_*hoo 3 c# oop

让我们说:

public interface IBase
{
// Stuff
}

public class Derived : IBase
{
// Stuff
}
Run Code Online (Sandbox Code Playgroud)

做的时候

Derived instance_ = new CDrv(); 
Ibase ibase = instance_; // Line 1
Run Code Online (Sandbox Code Playgroud)

这是隐式转换还是赋值?

是否可以通过重写转换或赋值运算符或其他方法来生成克隆instance_和赋值/转换ibase

或者换句话说,是否有任何方法可以传递instance_by值而不是使其成为struct?我不希望它是一个结构,因为我有许多函数返回Derived,上面的转换/赋值很少发生.

Ree*_*sey 6

没有隐式转换可以克隆该对象.

您需要通过方法或新构造函数创建一个"克隆"对象的机制(可能实现ICloneable,尽管该接口不太理想):

IBase ibase = new Derived(instance_); // Using "copy constructor" you create
Run Code Online (Sandbox Code Playgroud)

要么:

IBase ibase = instance_.Clone(); // ie: implement ICloneable, or similar mechanism
Run Code Online (Sandbox Code Playgroud)

  • +1如果您只需要浅拷贝,请查看Object.MemberwiseClone(http://msdn.microsoft.com/en-us/library/system.object.memberwiseclone.aspx) (2认同)