草庐IT

c# - 'readonly' 修饰符是否创建字段的隐藏副本?

MutableSlab和ImmutableSlab实现之间的唯一区别是应用于handle字段的readonly修饰符:usingSystem;usingSystem.Runtime.InteropServices;publicclassProgram{classMutableSlab:IDisposable{privateGCHandlehandle;publicMutableSlab(){this.handle=GCHandle.Alloc(newbyte[256],GCHandleType.Pinned);}publicboolIsAllocated=>this.handle.Is

仅在命名空间内公开类的 C# 访问修饰符

在Java中,你有包级保护,确保类只能在包内使用。C#中的命名空间或多或少类似于包。但是C#没有保护命名空间内类的保护级别。这有什么具体原因吗? 最佳答案 没有这样的访问修饰符:最接近的修饰符是internal,但保护的单位是类所在的程序集,而不是它的命名空间。有人可能会争辩说,使用internal可以实现类似级别的控制,因为这两种限制都会阻止外部人员访问您的库的实现细节。唯一对它有所影响的人是你,图书馆的作者,你完全控制着暴露什么和隐藏什么。从本质上讲,这意味着如果您不想在其namespace之外使用某个类,只需避免使用它即可;如

c# - 为什么有人会在 C# 中使用 "in"参数修饰符?

所以,我(认为我)理解了in参数修饰符的作用。但它所做的似乎是相当多余的。通常,我认为使用ref的唯一原因是修改调用变量,这被明确禁止在。因此,通过in引用传递在逻辑上似乎等同于通过值传递。是否有某种性能优势?我相信在后端方面,ref参数必须至少复制变量的物理地址,它应该与任何变量的大小相同典型的对象引用。那么,优势是只存在于更大的结构中,还是存在一些幕后编译器优化使其在其他地方具有吸引力?如果是后者,为什么我不应该让每个参数成为一个in? 最佳答案 in最近引入了C#语言。in实际上是一个refreadonly。一般来说,in只有

c# - 更改资源文件 (resx) 命名空间和访问修饰符

在我的网络项目中,我在App_GlobalResources文件夹中使用了4个资源文件。其中之一(lang.resx)在我到达该项目之前就已创建。它具有正确的命名空间(WebApplication.App_GlobalResources)和访问修饰符:public。另一方面,我刚刚创建的其他三个资源文件具有不同的命名空间(Resources)和internal访问修饰符,我无法更改它在VisualStudio的资源文件表单上,因为它已被禁用。如果我尝试直接在designer.cs文件中更改它,修改将在下次保存文件时取消。这不是一个严重的错误,但它可能会误导项目中的其他开发人员为他们将使

c# - (C# 7.2) "private protected"修饰符的用例是什么?

C#7.2introducestheprivateprotectedmodifier.我一直保护对具有属性的字段的访问,允许通过Get/Set方法进行访问,因为我通常不希望我的对象的内部状态被我自己的类以外的任何东西修改。我想了解为什么C#语言团队要添加此功能。在谷歌上进行广泛搜索、阅读和观看“最新消息”媒体(我看过pressrelease、details和videobyMadsTorgerson)后,我仍然一无所知。对我来说,这似乎允许开发人员打破Liskov替换原则,但这可能是因为我不明白为什么现在存在此功能。我知道它是如何使用的,只是不知道为什么-请有人提供一个真实世界的使用示例

c# - 方法名中使用 "Async"后缀是否取决于是否使用 'async'修饰符?

在方法名称后缀“Async”的约定是什么?是否应该将“Async”后缀仅附加到使用async声明的方法?修饰符?publicasyncTaskConnectAsync()或者该方法只返回Task就足够了吗?或Task?publicTaskConnectAsync() 最佳答案 我认为即使从Microsoft文档来看,事实也是模棱两可的:InVisualStudio2012andthe.NETFramework4.5,anymethodthatisattributedwiththeasynckeyword(AsyncinVisualB

c# - C# 中的默认访问修饰符是什么?

类、方法、成员、构造函数、委托(delegate)和接口(interface)的默认访问修饰符是什么? 最佳答案 C#中所有内容的默认访问权限是“您可以为该成员声明的最受限制的访问权限”。例如:namespaceMyCompany{classOuter{voidFoo(){}classInner{}}}相当于namespaceMyCompany{internalclassOuter{privatevoidFoo(){}privateclassInner{}}}一种异常(exception)情况是使属性的一部分(通常是setter)比

c# - 内部与私有(private)访问修饰符

C#中的internal和private访问修饰符有什么区别? 最佳答案 internal用于程序集范围(即只能从同一.exe或.dll中的代码访问)private适用于类范围(即只能从同一类中的代码访问)。 关于c#-内部与私有(private)访问修饰符,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/3813485/

C# "internal"进行单元测试时访问修饰符

我是单元测试的新手,我想弄清楚我是否应该开始使用更多的internal访问修饰符。我知道如果我们使用internal并设置程序集变量InternalsVisibleTo,我们可以测试我们不想从测试项目中声明为公共(public)的函数。这让我觉得我应该始终使用internal因为至少每个项目(应该?)都有自己的测试项目。你们能告诉我为什么我不应该这样做吗?什么时候应该使用private? 最佳答案 内部类需要测试,有一个assembly属性:usingSystem.Runtime.CompilerServices;[assembly

c# - 无法在控制台应用程序的 'async' 方法上指定 'Main' 修饰符

我是使用async修饰符进行异步编程的新手。我想弄清楚如何确保我的控制台应用程序的Main方法实际异步运行。classProgram{staticvoidMain(string[]args){Bootstrapperbs=newBootstrapper();varlist=bs.GetList();}}publicclassBootstrapper{publicasyncTask>GetList(){GetProgramspro=newGetPrograms();returnawaitpro.DownloadTvChannels();}}我知道这不是从“顶部”异步运行的。由于无法在Ma