我的整个开发团队都认为,静态方法使用起来很糟糕。在某些情况下,我真的看不出有什么缺点。当我以前需要无状态方法时,我总是为此目的使用静态方法。我同意他们的一些观点,例如我知道它们很难测试(尽管并非不可能)。我不明白的是,他们声称,静态方法始终保存在内存中,并将填充基本内存使用量。所以,如果你在你的程序中使用了100个静态方法,当程序启动时所有的方法都被加载到内存中并且会不必要地填满内存。此外,静态方法会增加内存泄漏的风险。这是真的吗?只为调用方法而必须创建类的新实例是非常不方便的。但他们现在就是这样做的,在方法中间创建一个实例并调用该方法,这可能只是一个静态方法。
在C#中,我有基类Product和派生类Widget。产品包含静态方法MyMethod()。我想从静态方法Widget.MyMethod()调用静态方法Product.MyMethod()。我不能使用base关键字,因为它只适用于实例方法。我可以显式调用Product.MyMethod(),但如果我稍后将Widget更改为从另一个类派生,我必须修改该方法。C#中是否有一些类似于base的语法允许我从派生类的静态方法调用基类的静态方法? 最佳答案 static方法基本上是一种从面向对象概念回退的方法。因此,它们在继承层次结构中不是很灵
我有一个程序集,一次可能被多个进程使用。如果我使用的是静态类,那么多个进程是否都会使用该类的同一个“实例”?由于进程是分开的,它们是否会在不同的应用程序域下运行,因此静态“实例”是分开的?这里的细节是该程序集正由自定义BizTalk适配器使用,我可以将其设置为并行批处理消息。这就是我上面所说的“多进程”。 最佳答案 静态类在每个应用程序域中只存在一次。在您的情况下,这取决于适配器是在同一应用程序域中使用多个线程(因此共享静态类的单个实例)还是使用多个进程(因此具有静态类的单独实例)。 关
我现在正在为AssenblyResolve事件苦苦挣扎一段时间。我搜索了stackoverflow并进行了其他谷歌搜索,并尝试了所有我认为相关的内容。以下是更接近我的问题的链接(在我看来):AssemblyResolveisnotinvokedandFileNotFoundExceptionisthrownduringserializationWheretohandleAssemblyResolveeventinaclasslibrary?我有一个带有静态方法的Bootstrapper类(为了清楚起见,我将删除我们拥有的线程安全代码:publicstaticvoidInitialize
我正在从事一个新项目,我注意到一些我不确定是否真实的代码。我用来证明问题的名称和值是假的。publicclassMyConsts//Shoulditbestatic?{publicconststringMyConst1="a";publicconststringMyConst2="b";publicconststringMyConst3="c";publicconststringMyConst4="d";....}按照我的逻辑,这个类(只包含常量值)应该是静态的,所以没有选项可以初始化它,这没有任何意义,我说得对吗?编辑:我在盲目编写代码,所以我混淆了string和const的顺序-因
如何从另一个c#源文件导入静态方法并在没有“点”的情况下使用它?喜欢:foo.csnamespacefoo{publicstaticclassbar{publicstaticvoidfoobar(){}}}程序.csusingfoo.bar.foobar;我不能只是foobar();,但是如果我在顶部编写usingfoo;并调用foobar()作为foo.bar.foobar()它可以工作,尽管它很冗长。有什么解决方法吗? 最佳答案 您可以使用C#6.0。C#6.0allowsstaticimport(SeeusingStaticM
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我想这更像是一个框架设计问题。我最近想知道为什么System.Array中的大多数方法都是静态的。我的直觉react总是使用例如Array实例上的IndexOf(object),而不是System.Array.IndexOf(array,object)。决定是否将方法设为静态是否有一个主要原则?我发现了这个问题:WhenisitbesttouseStati
泛型类中的静态字段对于泛型参数的每个组合都有一个单独的值。因此它可以用作Dictionarywhatever>这比静态Dictionarywhatever>好还是坏?换句话说,这些实现中哪个更有效?publicstaticclassMethodGen{publicstaticreadonlyActionMethod=CreateMethod();staticActionCreateMethod(){/*...*/}}或者,publicstaticclassMethodGen{staticreadonlyDictionarymethods=newDictionary();publicst
我想知道初始化静态成员内联有什么区别:classFoo{privatestaticBarbar_=newBar();}或在静态构造函数中初始化它,如下所示:classFoo{staticFoo(){bar_=newBar();}privatestaticBarbar_;} 最佳答案 如果您的类型中有一个静态构造函数,它会由于beforefieldinit而改变类型初始化不再应用标志。它还会影响初始化顺序-变量初始化器都在静态构造函数之前执行。据我所知,就这些。 关于c#-在C#中初始化静
我打算在ASP.NET中使用静态变量而不是应用程序状态,我想知道这是否是正确的方法:[Global.asax.cs]...publicclassGlobal:System.Web.HttpApplication{voidApplication_Start(objectsender,EventArgse){//Codethatrunsonapplicationstartup}...privatestaticDictionarycacheItems=newDictionary();privatestaticobjectlocker=newobject();publicstaticDicti