草庐IT

c# - 如何在 C# 静态和非静态方法之间做出决定?

[编辑]我最初的问题是“为什么要在静态和非静态之间做出决定?两者都做同样的事情......”不幸的是,它被编辑为我真正想避免的C#特定问题。所以,让我做一些补充:当我说接口(interface)时,我指的不是C#-keyword-interface,而是我理解的类似于C++-interface的东西:一组定义良好的函数来操作我的对象。当说削弱我的界面时,我的意思是我有不同的功能(静态/非静态)做同样的事情。当有不同的功能来做同样的事情时,我的界面不再被很好地定义。所以,正如看门人鲍勃所说,我可以实现一个Validate()函数Document.Validate(myDocumentOb

c# - 由于非托管内存处理的延迟导致内存不足?

我的应用程序因内存不足异常而崩溃,有时其他异常也可能是由内存不足引起的。我用这个简单的代码重现了这个问题:for(inti=0;i理论上这段代码不应该崩溃,因为位图应该被自动垃圾收集,但在32位模式下运行时它会持续崩溃。问题可以这样解决:for(inti=0;i当然,这个解决方案与您不应显式调用GC.Collect的常识相悖,但我怀疑这是一个它确实有意义的场景。任何人都可以对此提供任何知情的见解吗?有没有更好的方法来解决这个问题? 最佳答案 RenderTargetBitmap很可能有与其关联的native资源。您有足够的托管内存(

c# - MS C# 编译器和非优化代码

注意:我注意到我发布的示例中存在一些错误-编辑以修复它如果您不启用优化,官方C#编译器会做一些有趣的事情。例如,一个简单的if语句:intx;//...//if(x==10)//dosomething优化后会变成下面这样:ldloc.0ldc.i4.s10ceqbne.un.sdo_not_do_something//dosomethingdo_not_do_something:但是如果我们禁用优化,它就会变成这样:ldloc.0ldc.i4.s10ceqldc.i4.0ceqstloc.1ldloc.1brtrue.sdo_not_do_something//dosomethingd

c# - C# 的非接口(interface)依赖模拟框架

我是模拟的新手,所以我在这里可能完全错了,但我相信大多数模拟框架都依赖于接口(interface)。不幸的是,我们的大部分代码都没有使用接口(interface)。前几天,我看到了一个Java模拟框架,它重现了一个类\对象的字节码,不调用它的内部方法,但你仍然可以测试它是否调用了这些方法。我的问题是:.Net是否有任何模拟框架可以做类似的事情?我正在寻找免费的东西,我不想要需要虚拟或抽象方法的东西。 最佳答案 微软研究院开发了Moles为此,它是Pex的一部分,但可以独立安装。而且是免费的。有个好introductoryarticl

c# - 静态事件与 C# 中的非静态事件相比如何?

我刚刚意识到存在静态事件-我很好奇人们如何使用它们。我想知道相对比较如何支持静态方法与实例方法。例如,静态方法基本上是一个全局函数。但我总是将事件与对象的实例联系起来,但我很难在全局层面考虑它们。这里有一些代码可以引用,如果它有助于解释:voidMain(){varc1=newC1();c1.E1+=()=>Console.WriteLine("E1");C1.E2+=()=>Console.WriteLine("E2");c1.F1();}//>+D()publicdelegatevoidD();//+>E1//+>>E2//+F()//>//>E1//>E2publicclassC

c# - 停止非托管委托(delegate)的垃圾收集

我最近一直在尝试使用R.NET让R与.NET和C#对话。到目前为止一切顺利,但我遇到了一个我似乎无法解决的障碍。我对简单的基本命令没有任何问题。我制作了一个简单的计算器,以及将数据导入数据网格的东西。但是现在我不断收到以下错误:Acallbackwasmadeonagarbagecollecteddelegateoftype'R.NET!RDotNet.Internals.blah3::Invoke'.Thismaycauseapplicationcrashes,corruptionanddataloss.Whenpassingdelegatestounmanagedcode,they

c# - WPF 验证取决于必填/非必填字段

我是WPF开发的新手,但我正在考虑如何用一block石头杀死3只鸟。示例:我有一个包含2个文本框和2个文本block的表单。第一个“鸟”将能够“丰富”一些带有星号的文本block,如果它们引用必填字段:然后TextBlock将以不同方式显示其文本,第一个将带有星号,而未定义自定义属性的则不会。第二只鸟是对文本框的值进行某种验证,如果我理解正确的话,这是通过使用CustomValidationRule完成的,我为此实现了一个类:classAgeController:ValidationRule{publicoverrideValidationResultValidate(objectva

c# - 使用哪一个 : Managed vs. 非托管哈希算法

在常规C#应用程序中,哪个类用于哈希:xxxManaged或xxx(即SHA1Managed与SHA1)为什么? 最佳答案 以***Cng结尾的非托管哈希,即SHA256Cng,也会有平台限制。它们比托管替代方案快很多,但会在WindowsXP等运行时失败。如果您知道您的程序将始终在Windows7、VistaSP1或2008上运行,那么它们的性能通常会比托管版本好很多,即使有native互操作开销也是如此。如果您正在编写一个通用程序,***Managed类将更易于使用,因为它们将始终有效。

C# 无法从泛型方法调用重载的非泛型方法

我有一些带有foo方法的遗留代码,它有700多个重载:[DllImport("3rdparty.dll")]protectedstaticexternvoidfoo(intlen,refstructAobj);[DllImport("3rdparty.dll")]protectedstaticexternvoidfoo(intlen,refstructBobj);[DllImport("3rdparty.dll")]protectedstaticexternvoidfoo(intlen,refstructCobj);//and700similaroverloadsforfoo...我想

c# - 字段初始值设定项不能引用非静态字段、方法或属性?

我有一个存储库类和一个服务类,如下所示:publicclassDinnerRepository{DinnerDataContextdb=newDinnerDataContext();publicDinnerGetDinner(intid){returndb.Dinners.SingleOrDefault(d=>d.DinnerID==id);}//OthersCode}publicclassService{DinnerRepositoryrepo=newDinnerRepository();Dinnerdinner=repo.GetDinner(5);//OtherCode}这会引发错