让我们说:
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,上面的转换/赋值很少发生.
没有隐式转换可以克隆该对象.
您需要通过方法或新构造函数创建一个"克隆"对象的机制(可能实现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)