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

Zen*_*ker 3 c# inheritance

在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();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在按照上面的代码,CSC不会发出任何警告.但代码令人惊讶.

我使用ILDasm打开了IL代码,它显示派生类,即GameObject为'GameObject'名称,基类名称为''.

所以我的问题是

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

  2. 如果粘贴在带有ANSI编码的记事本上,我们会根据我的朋友Abhishek sur获得一个奇怪的字符.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();
        }
    }
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 8

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

忽略非ASCII部分,这实际上只是类:

public class Hello {}

public class He11o : Hello {}
Run Code Online (Sandbox Code Playgroud)

某些字体中,您可以区分小写字母和一个字体,但在某些字体中您不能.但他们的角色不同.

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

编辑:您的第二个代码段不能编译,原因很明显,您已经声明了两次相同的类名.不是两个看起来相同的名字,而是真正相同的名字.