gpt4 book ai didi

c# - 为什么没有具有相同基类和派生类名称的循环继承

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

就在other thread at SO今天我发现了这个小片段代码,我填充了更多代码以使其完整,

class GameObject
{
public virtual void Hello()
{

Console.WriteLine("Hello method in base class");
}
}

class GameObjеct : GameObject
{
public override void Hello()
{
Console.WriteLine("Hello method in derived class");

}

}

class Program
{

public static void Main(string[] args)
{
GameObject obj = new GameObject();//Why i never can call Derived? Though c# allows it?
obj.Hello();


Console.ReadLine();
}
}

现在按照上面的代码,CSC 根本不会发出任何警告。但是这段代码出人意料地工作。

我什至使用 ILDasm 打开了 IL 代码,它显示了派生类,即 GameObject 作为“GameObject”名称和不带“”的基类名称。

所以我的问题是

  1. 编译器如何在运行时区分这两个类名?

  2. 如果使用 ANSI 编码粘贴到记事本上,我们会根据我的 friend Abhishek sur 在 derviced 类名中得到一个奇怪的字符。 http://twitpic.com/68co6z

谢谢

编辑:用不同的名称更新相同的代码,我从编译器中得到错误。

class XXXYYY
{
public virtual void Hello()
{

Console.WriteLine("Hello method in base class");
}
}

class XXXYYY : XXXYYY
{
public override void Hello()
{
Console.WriteLine("Hello method in derived class");

}

}

class Program
{

public static void Main(string[] args)
{
XXXYYY obj = new XXXYYY();//Why i never can call Derived? Though c# allows it?
obj.Hello();


Console.ReadLine();
}
}

最佳答案

基本上,第二个类名中看起来像“e”的字符是非 ASCII 字符。如果将该源代码放入具有支持它的编码(例如 UTF-8)的文本文件中,并告诉 C# 编译器使用什么编码(我相信默认情况下为 UTF-8),那么它会将它们视为不同的类名.

忽略非 ASCII 部分,这真的只是类:

public class Hello {}

public class He11o : Hello {}

一些 字体中,您可以分辨出小写字母和 one 之间的区别,但在某些字体中您不能。尽管它们是不同的字符。

当您尝试将其粘贴到记事本时失败,因为您使用的 ANSI 编码(ANSI 是一个含糊不清的术语)不包含该字符。

编辑:你的第二个代码片段没有编译,原因很明显,你已经声明了两次相同的类名。不是两个看起来相同的不同名称,而是真正的相同名称

关于c# - 为什么没有具有相同基类和派生类名称的循环继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7120287/

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