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

时间:2011-02-17 16:57:42

标签: c# oop

让我们说:

public interface IBase
{
// Stuff
}

public class Derived : IBase
{
// Stuff
}

做的时候

Derived instance_ = new CDrv(); 
Ibase ibase = instance_; // Line 1

这是隐式转换还是分配?

是否可以通过覆盖转换或赋值运算符或其他方法来生成instance_的克隆并分配/转换为ibase

或者换句话说,是否有任何方法可以通过值传递instance_而不是使其成为结构?我不希望它成为一个结构,因为我有许多函数返回Derived,并且很少会发生上述转换/赋值。

1 个答案:

答案 0 :(得分:6)

没有隐式转换会克隆该对象。

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

IBase ibase = new Derived(instance_); // Using "copy constructor" you create

或者:

IBase ibase = instance_.Clone(); // ie: implement ICloneable, or similar mechanism