C# 中修饰符的基础结构和行为
Posted
技术标签:
【中文标题】C# 中修饰符的基础结构和行为【英文标题】:Underlying structure and behavior of modifiers in C# 【发布时间】:2013-11-12 18:11:20 【问题描述】:访问修饰符如 public 和关键字如 virtual 自定义类或属性的行为。所以它们的行为类似于属性。但是它们在内部是如何工作的呢?他们是否从 .Net 类库中调用任何代码或任何属性?
【问题讨论】:
不确定我是否理解这个问题??你想知道它们是做什么的,或者在代码库中定义的位置吗? 谷歌?我想你可以很快找到这样的答案.... 然后找到答案并贴出来:-) “它们在内部是如何工作的?”编译器团队可能不得不为您回答这个问题。虽然我怀疑它是专有的,唯一好的答案是“符合规范”。 “它们在内部是如何工作的” - 您想讨论元数据格式和 .NET 程序集中的MethodDef
表吗?
【参考方案1】:
不,public
是 access modifier。 Virtual
是您正确指出的关键字,尽管它们都没有特别引用任何 .NET 库。它们不引用任何属性,因此将它们称为属性是不正确的。 Attributes 明显不同。
它们在内部是如何工作的?
请参阅上面提供的链接。
他们是否从 .Net 类库中调用任何代码或任何属性?
不,如前所述,它们与属性明显不同,并且不与任何 .NET 库相关联。
【讨论】:
【参考方案2】:不,它们分别告诉 C# 编译器如何处理可访问性和继承方面的方法。
它们与 .Net 类库无关。此外,“属性”一词在 C# 的上下文中具有非常特定的含义,它们与这些关键字无关。
【讨论】:
【参考方案3】:public 和 virtual 基本上是保留字,这意味着它们具有特定的含义。 当编译器识别这些保留字时,它将采取设计架构中定义的必要操作。因此用户不能将保留字声明为标识符。我认为他们不会引用数据类型之类的东西(数据类型将在内部被引用,因为它们被设计为结构。)
【讨论】:
【参考方案4】:它们是语言的一部分。它们被称为keywords
,由语言保留,并将根据它们的作用在编译器中显式解析。它们是保留的,所以你不能这样做:
User public = new User();
在此我使用“public”关键字作为变量名,这在 C# 语法中是非法的。如果发现某个关键字使用不当,编译器将不会编译您的代码。 (通常在 IDE 中,如果出现错误,编译器甚至不会被调用)
需要注意的一点是,它们不是操作员。 (如 + - =)。运算符,在许多事情中,可以重载(您可以定义它们如何改变您的数据)。在 C# 中(我不能保证其他语言),关键字不能重载。
编程语言中的keyword
通常用于告诉编译器如何处理特定上下文中的特定代码段。使用某些关键字的某些效果比其他关键字更明显。有点像这个代码在做什么的提示(在你的情况下,它的保护级别是什么)。每个keyword
都有自己的行为规则。例如,LINQ 有自己的运算符,如 as
、where
、select
,不能像 public
、protected
和 private
这样使用。
有关 C# 中关键字的更多信息,请查看以下内容:
http://msdn.microsoft.com/en-us/library/x53a06bb.aspx
【讨论】:
【参考方案5】:public 关键字是对编译器的指令,称为访问修饰符。这意味着您希望某个类型或成员可以公开访问,即以不受限制的方式访问。
微软在这里描述得很好:
http://msdn.microsoft.com/en-us/library/yzh058ae(v=vs.80).aspx
virtual 关键字是编译器的另一条指令。它是一种不同于 public 的 修饰符。它与访问无关。相反,它表示您打算能够覆盖派生类中给定方法/属性的行为。
微软在这里有一个很好的描述:
http://msdn.microsoft.com/en-us/library/9fkccyh4(v=vs.71).ASPX
它们都与属性有任何关系,这是一个完全不同的概念。它们在此处进行了描述:
http://msdn.microsoft.com/en-us/library/z0w1kczw.aspx
【讨论】:
以上是关于C# 中修饰符的基础结构和行为的主要内容,如果未能解决你的问题,请参考以下文章