C# 使用继承时接口实现出现问题
我已经创建了IsAllowClonable接口来为我的所有类创建类的浅层副本,但是继承不能正常工作 看看Main方法,node2返回的是Point3D对象,而不是Node 细节C# 使用继承时接口实现出现问题,c#,inheritance,interface,C#,Inheritance,Interface,我已经创建了IsAllowClonable接口来为我的所有类创建类的浅层副本,但是继承不能正常工作 看看Main方法,node2返回的是Point3D对象,而不是Node 细节 Point2D是基类 从Point2D类派生的Point3D类 节点 从Point3D类派生的类 使用系统; 名称空间控制台测试 { 内部静态类程序 { 私有静态void Main() { 尝试 { var节点=新节点(1,0,0,0); var node2=node.ShallowClone();//此代码正在返回
- Point2D是基类
- 从Point2D类派生的Point3D类
- 节点 从Point3D类派生的类
使用系统;
名称空间控制台测试
{
内部静态类程序
{
私有静态void Main()
{
尝试
{
var节点=新节点(1,0,0,0);
var node2=node.ShallowClone();//此代码正在返回Point3D对象,而不是节点
}
捕获(例外)
{
投掷;
}
最后
{
Console.ReadLine();
}
}
}
公共接口是允许克隆的
{
T浅克隆();
}
公共类Point2D:IsAllowClonable
{
公共整数X{get;set;}
公共整数Y{get;set;}
公共点2D()
{
}
公共点2D(整数x,整数y)
{
X=X;
Y=Y;
}
公共点2D浅克隆()
{
返回新的点2d(X,Y);
}
}
公共类Point3D:Point2D,ISAllowClonable
{
公共int Z{get;set;}
公共点3D()
{
}
公共点3D(int x,int y,int z):基(x,y)
{
Z=Z;
}
新公共点3D浅克隆()
{
返回新的点3d(X,Y,Z);
}
}
公共类节点:Point3D,IsAllowClonable
{
公共int Id{get;set;}
公共节点()
{
}
公共节点(int-id,int-x,int-y,int-z):基(x,y,z)
{
Id=Id;
}
节点IsAllowClonable.ShallowClone()
{
返回新节点(Id,X,Y,Z);
}
}
}
因为对于节点
您已经实现了IsAllowClonable
as,所以只有当您强制转换到它时它才会工作:
// prints Node
Console.WriteLine(((IShallowCloneable<Node>)node).ShallowClone().GetType().Name);
//打印节点
Console.WriteLine(((ishAllowClonable)节点).ShallowClone().GetType().Name);
如果你想让它像
Point3D
那样运行,你需要像在那里一样实现它(用关键字隐藏继承的Point2D
实现)。因为对于节点
你已经实现了IsAllowClonable
作为,所以只有当你强制转换到它时它才会工作:
// prints Node
Console.WriteLine(((IShallowCloneable<Node>)node).ShallowClone().GetType().Name);
//打印节点
Console.WriteLine(((ishAllowClonable)节点).ShallowClone().GetType().Name);
如果您想让它表现为
Point3D
,您需要像在那里一样实现它(用关键字隐藏继承的Point2D
实现)。所以如果您想显式地使用ShallowClone方法而不更改类
var node = new Node(1, 0, 0, 0);
var node2 = ((IShallowCloneable<Node>)node).ShallowClone();
附加参考
所以如果您想显式地使用ShallowClone方法而不更改类
var node = new Node(1, 0, 0, 0);
var node2 = ((IShallowCloneable<Node>)node).ShallowClone();
附加参考
请解释为什么这是answer@ColinM现在,我的解释可以了吗?请解释一下为什么这是answer@ColinM现在,我的解释可以了吗?