当前位置: 首页 > 编程语言 > C#

C#private、static和readonly分享

时间:2023-04-11 00:01:39 C#

C#private、static和readonly我正在审查log4net的一些代码,我遇到了这个问题。privatestaticreadonlyILoglogger=LogManager.GetLogger(typeof(AdminClient));我想知道为什么你需要privatestaticreadonly。根据我的理解,private意味着除非有访问器方法或get属性,否则不能在类外部使用该变量。static表示该变量仅在该文件中起作用。readonly意味着您只能读取值而不能分配给它。所以,我在想写这段代码的人。声明它是私有的,因为他们不希望它在类之外使用,而声明它是静态的,所以他们不希望它在文件之外使用。但是,静态地拥有一个get属性可以防止这种形式的发生。我想我能理解readonly,只能读取和设置值。非常感谢任何建议,我认为你误解了静态。静态并不意味着“不能在文件外使用”。静态意味着:每班一个。该声明所做的是创建一个仅分配一次(静态)、仅在类中可用(而不是在派生类中)(私有)并且不能在其初始化后写入(只读)的记录器。不过问得好!static并不意味着它不能从其他文件访问——那不是C。static关键字意味着记录器对象是一个类变量而不是实例变量,所以即使它们是从该类的不同对象访问的,它们都将指向同一个记录器对象。c#中的static表示成员与类相关联,而不是与类的实例相关联。Readonly非常重要,因为在C#中,大多数变量,尤其是这个变量,都是引用变量。readonly意味着该变量将始终引用同一个记录器。开发人员所说的是,他们希望在此类的任何实例中调用logger.Info(...)时使用公共(静态)实例(因此无需为每个类实例创建新的记录器),他们想确保它自创建以来没有改变(只读),如果我们在派生类中的虚函数中,那么我想确保我没有使用基类(私有)因为失误。readonly变量与const非常相似,因为它的值在其整个生命周期中都是恒定的。不同之处在于,readonly变量在运行时初始化,而在编译时初始化为const。静态,通俗地说,意味着变量的实例不依赖于声明它的对象的实例。它的生命周期从函数调用持续到函数调用。静态变量访问起来更快,因为它们的存储空间在整个程序运行期间都保持分配状态。所以我们知道,我们可以回到你的问题。为什么'logger'是静态成员?这是一个设计决定。我需要知道你如何使用它来回答这个问题。为什么只读?因为它好像只初始化了一次,它的实例都被使用了。我们可以通过在初始化后立即将其设置为“只读”来确保没有其他人篡改记录器的值。将只读标志放在私有变量上的原因是声明该变量将始终引用同一个对象。私有化确实使类外的任何人都看不到它,但是这样我们就可以确保我们不会意外地用新对象覆盖变量,方法是编写类似logger=LogManager.GetLogger(typeof(AdminClient));的东西。我们在班级的其他地方。使用readonly它不会编译(除非它之前没有初始化,我们在(静态)构造函数中)静态变量属于“类变量”类别,它们是与类而不是类对象关联的变量,另一方面,实例变量是与类对象关联的变量,这意味着每次类对象初始化该对象时,它不会拥有自己的“实例变量”(非静态)副本,而静态变量在正在运行的程序中的所有类对象之间共享,如链接列表等大小。readonly是用于使变量只读的c#关键字,java不提供这样的设施你必须编写一个公共方法来访问你不想要的变量得到缓解。抱歉,我知道这个问题已经得到解答而且已经很老了,但我想让看到这篇文章的任何人都知道这就是您设置“单例”模式的方式。任何想要了解更多有关相关代码示例的人可能会受益于更多地了解单例及其使用方式(调解器、记录器、异步回调等)。//关于单例的mothershipthinghttp://msdn.microsoft.com/en-us/library/ff650316.aspxhttp://msdn.microsoft.com/en-us/library/ff650849.aspx//AboutWhat's对单身人士的讨论如此糟糕?以上就是C#学习教程分享的全部内容:C#private、static和readonly。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: