让我们说:
public interface IBase
{
// Stuff
}
public class Derived : IBase
{
// Stuff
}
做的时候
Derived instance_ = new CDrv();
Ibase ibase = instance_; // Line 1
这是隐式转换还是分配?
是否可以通过覆盖转换或赋值运算符或其他方法来生成instance_
的克隆并分配/转换为ibase
?
或者换句话说,是否有任何方法可以通过值传递instance_
而不是使其成为结构?我不希望它成为一个结构,因为我有许多函数返回Derived
,并且很少会发生上述转换/赋值。
答案 0 :(得分:6)
没有隐式转换会克隆该对象。
您需要通过方法或新构造函数创建一个“克隆”对象的机制(可能实现ICloneable,尽管该接口不太理想):
IBase ibase = new Derived(instance_); // Using "copy constructor" you create
或者:
IBase ibase = instance_.Clone(); // ie: implement ICloneable, or similar mechanism