所以我有以下代码:
/// <summary> /// The 'Prototype' abstract class /// </summary> abstract class ColorPrototype { public abstract ColorPrototype Clone(); } /// <summary> /// The 'ConcretePrototype' class /// </summary> class Color : ColorPrototype { private int _red; private int _green; private int _blue; // Constructor public Color(int red,int green,int blue) { this._red = red; this._green = green; this._blue = blue; } // Create a shallow copy public override ColorPrototype Clone() { Console.WriteLine( "cloning color RGB: {0,3},{1,{2,3}",_red,_green,_blue); return this.MemberwiseClone() as ColorPrototype; } } /// <summary> /// Prototype manager /// </summary> class ColorManager { private Dictionary<string,ColorPrototype> _colors = new Dictionary<string,ColorPrototype>(); // Indexer public ColorPrototype this[string key] { get { return _colors[key]; } set { _colors.Add(key,value); } } }
在我的主要方法中:
ColorManager colormanager = new ColorManager(); // Initialize with standard colors colormanager["red"] = new Color(255,0); // User clones selected colors ColorPrototype p1 = colormanager["red"].Clone(); bool isColor = p1 is Prototype.Color; Color color1 = p1 as Color;
我的问题是为什么变量p1的类型为Color(isColor为true),如果在clone方法中我将结果转换为ColorPrototype(将this.MemberwiseClone()作为ColorPrototype返回;)?
解决方法
if in the clone method I cast the result to ColorPrototype
因为即使将p1转换为ColorPrototype,p1的运行时类型仍为Color类型.转换引用类型允许您将类型T视为类型U,但它不会更改基础运行时类型.
原文地址:https://www.jb51.cc/csharp/99965.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。