繁体   English   中英

Eric Lippert的意思是“您需要知道基类是什么来确定基类是什么”?

[英]What does Eric Lippert mean by “you need to know what the base class is to determine what the base class is”?

我刚刚阅读了Eric Lippert撰写的这篇有趣的文章, 十大最差C#特色 接近结束时他说:

在上述结肠之后解决姓名的规则并不充分; 您最终可能需要知道基类是什么,以确定基类是什么。

通过冒号,他指的是继承运算符(例如Dog : Animal )。

Eric指的是什么情况? 任何人都可以提供代码示例吗?

这可能发生在具有泛型,继承和嵌套类的复杂场景中:

class Base<T> {
    public class Inner {}
}

class Derived : Base<Derived.Inner2> {
    public class Inner2 : Inner {}
}

结果

  • 要确定Derived的基类,我们需要绑定Derived.Inner2
  • 要绑定Derived.Inner2 ,我们需要解析Inner符号。
  • Inner符号继承自其包含范围的基类,因此我们需要再次确定Derived的基类。

SLaks给出了一个很好的答案; 请参阅我的评论以获得一些补充说明

正如我在评论中所说,我正在寻找关于这个主题的旧笔记,如果我找到它们,我会写一篇博客。 这是一个有趣的附加示例。 这个计划是合法的。 类声明和字段声明中N的含义是相同还是不同? 如果它们是相同的,那么它们的完全限定类型表达式是什么? 如果它们不同,为什么规范要求它们不同?

public class N {}
public class B<T> 
{
    public class N {}
}

public class D : B<N> // base class
{
  N n;  // field
}

这说明了基本问题: 名称查找要求基类已知 ,但基类是按名称查找的。

现在想想界面如何在混合中起作用。 假设D类还实现了接口IN ,类似地嵌套在B并且可以全局使用。 接口查找是否解析为基类或全局命名空间? 这些是您在编写编译器时必须解决的各种问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM