C#private,static和readonly

ant*_*009 24 c# log4net access-modifiers

我正在审查log4net的一些代码,我遇到了这个.

private static readonly ILog logger = LogManager.GetLogger(typeof(AdminClient));
Run Code Online (Sandbox Code Playgroud)

我想知道为什么你需要私有静态只读.

从我的理解私有意味着变量不能在类外使用,除非有一个访问器方法或获取属性.

static意味着变量仅在此文件中作用域.

readonly意味着您只能从值中读取并且无法分配它.

所以,我在想那个编写这段代码的人.声明它是私有的,因为他们不希望它在类外使用和静态,因此不希望它在文件外部使用.但是,如果有一个get属性会静态阻止这种形式发生.

我想我只能理解readonly,而且只能读取和设置值.

非常感谢任何建议,

vic*_*ugo 45

  • private没有人应该使用类外的记录器字段(即使在子类中),如果你没有设置它,任何其他类都可以使用你的记录器登录你的类名.
  • static该属性附加到类,因此不会对该类的每个实例重复.如果你没有设置它,logger属性将在内存中占用系统对象的每个实例的额外空间(你误解了这个).
  • readonly不应修改记录器字段.


Ste*_*Mai 9

我认为你误解了静态.静态并不意味着"不能在文件外使用".静态意味着:每班有一个.该声明所做的是创建一个仅分配一次(静态)的记录器,仅在类中可用(不在派生类中)(私有),并且不能写入超过其初始化(readonly).

好问题虽然!


Tal*_*man 6

静态不意味着它不能从其他文件被访问-这不是C. static关键字意味着记录器对象是类变量,而不是一个实例变量,因此,即使从该类的不同的对象被访问时,他们将all都指向同一个logger对象.