gpt4 book ai didi

c# - "Recasting"接口(interface)的子类实例(声明为基类) - 为什么它有效?

转载 作者:行者123 更新时间:2023-11-30 14:24:13 25 4
gpt4 key购买 nike

我想要实现任意接口(interface)的子类,但被声明为基类,以便应用程序尝试将实例“重铸”到该接口(interface),并在重铸成功时使用它们。

我有一些疑问,所以我制作了这个短尖峰,令我高兴和惊讶的是,它起作用了。

我的问题是:为什么以及如何运作?有没有一种正式的方式可以让我事先知道它会起作用? C# 中的某种“转换规则”?

class Program
{
static void Main(string[] args)
{
var obj = new SubClass() as BaseClass;

Console.WriteLine(obj is ISubClass); // output = "True"

Console.ReadKey();
}
}

class BaseClass { }

class SubClass : BaseClass, ISubClass { }

interface ISubClass { }

最佳答案

你已经创建了一个 SubClass 的实例并且 SubClass 是从接口(interface)和 BaseClass 继承的,所以我们可以转换对象 SubClass 到其中任何一个。实际类型仍然是 SubClass,您刚刚将引用转换为它的基类型,如果您通过在实例上调用 GetType() 进行检查,您将看到它将评估类型SubClass,所以只是引用转换,原始对象还是一样。

您可能想阅读有关 polymorphsim 的内容和 Reference Conversion


(由 OP 编辑​​)来自第二个链接:

Conversions from a base type to a derived type only succeed at run time if the value being converted is a null reference or a reference type that is either the derived type itself or a more derived type.

(...) a class type can always be cast to an interface type that it implements. Similarly, conversions from an interface type to a class type that implements it only succeed at run time if the value being converted is a null reference or a reference type that is either the class type itself or a type derived from the class type.

关于c# - "Recasting"接口(interface)的子类实例(声明为基类) - 为什么它有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41874208/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com