C# 中基类对象到派生类引用的安全类型转换
在 C# 中直接将基类对象转换为派生类引用是有风险的,并且通常会导致运行时异常。 这是因为派生类引用需要一个自己类型的对象或 null。
说明性示例:
<code class="language-csharp">object o = new object(); string s = (string)o; // This will throw an exception at runtime</code>
在此不安全转换之后尝试访问派生类成员将导致错误:
<code class="language-csharp">int i = s.Length; // Runtime exception: InvalidCastException</code>
o
变量保存基类对象,与 Length
等派生类成员不兼容。
为了防止运行时错误,请务必在转换之前验证对象的实际类型。 is
运算符和模式匹配提供了安全的替代方案:
<code class="language-csharp">object o = new object(); if (o is string str) { int i = str.Length; // Safe access to Length } else { // Handle the case where o is not a string } // Or using pattern matching: if (o is string s2) { int length = s2.Length; }</code>
或者,重新评估你的类设计。如果需要在基类和派生类之间进行频繁的转换,则可能表明继承层次结构中存在缺陷。 通过重构来消除此类强制转换的需要通常是更好的解决方案。 如果合适的话,考虑使用接口或组合而不是继承。
以上是如何在 C# 中安全地将基类对象类型转换为派生类引用?的详细内容。更多信息请关注PHP中文网其他相关文章!