【发布时间】:2018-11-28 03:13:39
【问题描述】:
条件: 如果一个类(ep:A)继承了另一个类(ep:B)。
class B
{
public int id;
public string Name;
}
class A:B
{
public string className;
}
当我创建A的实例时,然后通过A的实例调用id
static void Main(string[] args)
{
A a = new A();
Console.WriteLine(a.id);
}
问题: 当我调用 Main 时,CLR 会检查所有 Main 的引用类型并将这些类型加载到 AppDomain 中。**
现在,我只引用 A 类型 - CLR 会加载 B 吗?** 我认为 B 类型将被加载到 AppDomain - 但是为什么呢?
那么,关于动态内存问题?CLR会给A类型多少内存?
内存会包含 B 的字段吗? 如果如我们所料,哪个 ctor 会初始化这些来自 B 的文件? B 的 ctor? 但是要注意ctor不能被继承。 那么,我们怎么称呼B的ctor呢?按base(关键字)? base如何获取B的ctor?
B::id 让我很困惑....我没有 B 的实例,我可以调用 B::id 吗? 谁知道这些问题的原因,请给我解释一下!非常非常感谢!!!
【问题讨论】:
-
您关心的是如何使用继承,或者微软是如何实现它的?如果 B 没有加载,编译器怎么知道 A 有一个 id 字段?你怎么能多态地将它用作 B?
-
@John 微软是如何实现的?
-
我没有答案。为什么这对您很重要?
-
不想成为 API 用户是什么意思? .NET 由数千个 API 构建而成。如果您打算使用 .NET,那么您将使用 api。这个问题的答案不会让你更有效率。如果您想做低级编程,那么 C# 可能不适合您。 C 或 Rust 可能更符合您的喜好。
-
@John 谢谢你的帮助!
标签: c#