C#7.2introducestheprivateprotectedmodifier.我一直保护对具有属性的字段的访问,允许通过Get/Set方法进行访问,因为我通常不希望我的对象的内部状态被我自己的类以外的任何东西修改。我想了解为什么C#语言团队要添加此功能。在谷歌上进行广泛搜索、阅读和观看“最新消息”媒体(我看过pressrelease、details和videobyMadsTorgerson)后,我仍然一无所知。对我来说,这似乎允许开发人员打破Liskov替换原则,但这可能是因为我不明白为什么现在存在此功能。我知道它是如何使用的,只是不知道为什么-请有人提供一个真实世界的使用示例
我知道有一个属性可以处理私有(private)setter,但我有点希望将此行为作为默认行为,有没有办法实现这一点?除了调整来源。如果有这样的设置就好了。 最佳答案 我来这里是为了寻找使Json.NET在反序列化时填充只读属性的实际属性,这就是[JsonProperty],例如:[JsonProperty]publicGuid?ClientId{get;privateset;}替代方案只需提供一个具有与您的属性匹配的参数的构造函数:publicclassFoo{publicstringBar{get;}publicFoo(strin
我对C#比较陌生,每次开始做C#项目时(我只用C#做过几近成熟的项目)我想知道为什么没有内部类?也许我不明白他们的目标。对我来说,内部类——至少是私有(private)内部类——看起来很像Pascal/Modula-2/Ada中的“内部程序”:它们允许将主类分解成更小的部分,以便于理解。示例:这是大多数时候看到的内容:publicclassClassA{publicMethodA(){myObjectClassB.DoSomething();//ClassBisonlyusedbyClassA}}publicclassClassB{publicDoSomething(){}}由于Cla
我不明白拥有以C#2开头的私有(private)setter的必要性。对我来说有一个setter方法就是让用户在那个类中设置一些变量。这样做时,我们不会将变量直接暴露给用户。相反,我们让他们通过这个公共(public)setter方法来完成。这对我来说是使用“封装”。有一些论点声称私有(private)setter可以让您应用封装。我不是通过使用公共(public)setter方法来使用封装吗?为什么我们需要私有(private)二传手?不可变类和具有私有(private)setter的类有什么区别? 最佳答案 逻辑上。私有(pri
VS2017(可能还有更早的版本)为我提供了这个方便的小构造函数快捷方式来生成privatereadonly字段并分配它。截图:这最终会生成一个名为userService的私有(private)成员,然后将其分配给:this.userService=userService;这违背了我使用的代码风格,即用前缀_命名所有私有(private)成员,导致赋值应该如下所示:_userService=userService;我怎样才能使VS通过其代码生成快捷方式遵守此代码样式规则? 最佳答案 这也可以直接在VisualStudio中实现。只需
我有一个我制作的组件,它非常适合我公司的团队。我希望能够使用NuGet使这个程序集可用于我的团队和我公司的类似团队正在从事的其他项目。但是,程序集并不是我想与世界分享的真正代码。我知道使用Maven,您可以从本地存储库创建本地存储库和源包。NuGet是否支持类似的功能?NuGet有没有办法指定本地存储库或拥有私有(private)包? 最佳答案 是的!您可以托管自己的NuGet服务器!最简单的方法是在您的服务器上创建一个共享文件夹并将其引用为您的Nuget服务器。您可以在以下位置找到有关如何执行此操作的更多信息:HostingYou
我想知道如何正确使用NUnit。首先,我创建了一个单独的测试项目,它使用我的主项目作为引用。但在那种情况下,我无法测试私有(private)方法。我的猜测是我需要将我的测试代码包含到我的主代码中?!-这似乎不是正确的做法。(我不喜欢在代码中包含测试的想法。)如何使用NUnit测试私有(private)方法? 最佳答案 一般来说,单元测试针对类的公共(public)接口(interface),理论上实现是无关紧要的,只要结果从客户的角度来看是正确的即可。因此,NUnit不提供任何机制来测试非公共(public)成员。
我想知道,既然使用反射可以做很多事情,那么我可以在构造函数执行完成后更改一个私有(private)只读字段吗?(注:纯属好奇)publicclassFoo{privatereadonlyintbar;publicFoo(intnum){bar=num;}publicintGetBar(){returnbar;}}Foofoo=newFoo(123);Console.WriteLine(foo.GetBar());//display123//reflectioncodehere...Console.WriteLine(foo.GetBar());//display456
当创建一个具有内部私有(private)方法的类时,通常是为了减少代码重复,不需要使用任何实例字段,将方法声明为静态是否有性能或内存优势?例子:foreach(XmlElementelementinxmlDoc.DocumentElement.SelectNodes("sample")){stringfirst=GetInnerXml(element,".//first");stringsecond=GetInnerXml(element,".//second");stringthird=GetInnerXml(element,".//third");}...privatestatic
给定这个类classFoo{//Wanttofind_barwithreflection[SomeAttribute]privatestring_bar;publicstringBigBar{get{returnthis._bar;}}}我想找到我将用属性标记的私有(private)项目_bar。那可能吗?我在寻找属性但从未寻找私有(private)成员字段的属性中完成了此操作。获取私有(private)字段需要设置哪些绑定(bind)标志? 最佳答案 使用BindingFlags.NonPublic和BindingFlags.In