草庐IT

c# - 为什么锁对象必须是静态的?

在多线程中使用私有(private)静态只读对象进行锁定是很常见的。我知道private通过加强封装减少了锁定对象的入口点,因此可以访问最重要的部分。但为什么是静态的?privatestaticreadonlyobjectLocker=newobject();最后,该字段仅在我的类(class)中使用,我也可以改用它:privatereadonlyobjectLocker=newobject();有什么意见吗?更新:作为例子,我已经粘贴了这段代码(只是一个例子)。我可以在此使用静态或非静态储物柜,两者都可以正常工作。考虑到下面的答案,我应该像这样定义我的储物柜?privatereado

c# - 有什么理由在 C# 中编写 "private"关键字吗?

据我所知,private是C#中的默认everywhere(这意味着如果我不编写public,protected、internal等。默认为private)。(如有错误请指正。)那么,编写该关键字的原因是什么,或者为什么它甚至对成员(member)存在?例如,当自动生成事件处理程序时,它看起来像这样:privatevoidRatTrap_MouseEnter(objectsender,CheeseEventArgse){}但如果这是隐含的和默认的,为什么它甚至写私有(private)的呢?只是为了让新手开发人员(不知道这是C#默认设置)知道它是私有(private)的吗?还是编译器有区

c# - 有什么理由在 C# 中编写 "private"关键字吗?

据我所知,private是C#中的默认everywhere(这意味着如果我不编写public,protected、internal等。默认为private)。(如有错误请指正。)那么,编写该关键字的原因是什么,或者为什么它甚至对成员(member)存在?例如,当自动生成事件处理程序时,它看起来像这样:privatevoidRatTrap_MouseEnter(objectsender,CheeseEventArgse){}但如果这是隐含的和默认的,为什么它甚至写私有(private)的呢?只是为了让新手开发人员(不知道这是C#默认设置)知道它是私有(private)的吗?还是编译器有区

c# - 使用接口(interface)时如何实现私有(private) setter ?

我已经创建了一个具有一些属性的接口(interface)。如果接口(interface)不存在,则类对象的所有属性都将设置为{get;privateset;}但是,这在使用接口(interface)时是不允许的,那么这是否可以实现,如果可以的话如何实现? 最佳答案 在接口(interface)中你只能为你的属性定义getterinterfaceIFoo{stringName{get;}}但是,在您的类(class)中,您可以将其扩展为拥有一个privatesetter-classFoo:IFoo{publicstringName{g

c# - 使用接口(interface)时如何实现私有(private) setter ?

我已经创建了一个具有一些属性的接口(interface)。如果接口(interface)不存在,则类对象的所有属性都将设置为{get;privateset;}但是,这在使用接口(interface)时是不允许的,那么这是否可以实现,如果可以的话如何实现? 最佳答案 在接口(interface)中你只能为你的属性定义getterinterfaceIFoo{stringName{get;}}但是,在您的类(class)中,您可以将其扩展为拥有一个privatesetter-classFoo:IFoo{publicstringName{g

c# - 计划的 "private protected"C# 访问修饰符是什么意思?

作为Roslyn的一部分GitHub上的文档,有一个名为Languagefeatureimplementationstatus的页面,具有针对C#和VB的计划语言功能。我无法理解的一个特性是privateprotected访问修饰符:privateprotectedstringGetId(){…}还有一个页面C#LanguageDesignNotes,它解释了许多新功能,但不是这个。EricLippert在comment中说:Yourerrorisinthinkingofthemodifiersasincreasingrestrictions.Themodifiersinfactalw

c# - 计划的 "private protected"C# 访问修饰符是什么意思?

作为Roslyn的一部分GitHub上的文档,有一个名为Languagefeatureimplementationstatus的页面,具有针对C#和VB的计划语言功能。我无法理解的一个特性是privateprotected访问修饰符:privateprotectedstringGetId(){…}还有一个页面C#LanguageDesignNotes,它解释了许多新功能,但不是这个。EricLippert在comment中说:Yourerrorisinthinkingofthemodifiersasincreasingrestrictions.Themodifiersinfactalw

c# - 为什么私有(private)字段是类型私有(private)的,而不是实例私有(private)的?

在C#(和许多其他语言)中,访问相同类型的其他实例的私有(private)字段是完全合法的。例如:publicclassFoo{privateboolaBool;publicvoidDoBar(FooanotherFoo){if(anotherFoo.aBool)...}}作为C#specification(第3.5.1、3.5.2节)声明对私有(private)字段的访问是在类型上,而不是在实例上。我一直在与一位同事讨论这个问题,我们正试图找出它为何如此工作的原因(而不是限制对同一实例的访问)。我们能想到的最好的论据是进行相等性检查,其中类可能想要访问私有(private)字段以确定

c# - 为什么私有(private)字段是类型私有(private)的,而不是实例私有(private)的?

在C#(和许多其他语言)中,访问相同类型的其他实例的私有(private)字段是完全合法的。例如:publicclassFoo{privateboolaBool;publicvoidDoBar(FooanotherFoo){if(anotherFoo.aBool)...}}作为C#specification(第3.5.1、3.5.2节)声明对私有(private)字段的访问是在类型上,而不是在实例上。我一直在与一位同事讨论这个问题,我们正试图找出它为何如此工作的原因(而不是限制对同一实例的访问)。我们能想到的最好的论据是进行相等性检查,其中类可能想要访问私有(private)字段以确定

c# - API设计中如何避免 "too many parameters"问题?

我有这个API函数:publicResultEnumDoSomeAction(stringa,stringb,DateTimec,OtherEnumd,stringe,stringf,outGuidcode)我不喜欢。因为参数顺序变得不必要地重要。添加新字段变得更加困难。更难看出传递的是什么。将方法重构为更小的部分更加困难,因为它会产生另一个在子函数中传递所有参数的开销。代码更难阅读。我想到了一个最明显的想法:有一个封装数据的对象并传递它,而不是一个一个地传递每个参数。这是我想出的:publicclassDoSomeActionParameters{publicstringA;publ