LogManager类有两个方法:GetLogger和GetCurrentClassLogger,带有一个重载参数TypeloggerTypepublicstaticLoggerGetLogger(stringname,TypeloggerType)publicstaticLoggerGetCurrentClassLogger(TypeloggerType)文档指出loggerType是“要创建的记录器的类型”。该类型必须继承自NLog.Logger。'这种重载的目的是什么?为什么我可能需要创建继承类型的记录器? 最佳答案 如果您想
我有基类ApublicclassA{publicvirtualvoidMethod(Aparameter){Console.WriteLine(MethodBase.GetCurrentMethod());}publicvirtualvoidMethod(Bparameter){Console.WriteLine(MethodBase.GetCurrentMethod());}}继承BpublicclassB:A{publicvirtualvoidMethod(objectparameter){Console.WriteLine(MethodBase.GetCurrentMethod(
我发现以下代码的C#编译器行为非常奇怪:varp1=newSqlParameter("@p",Convert.ToInt32(1));varp2=newSqlParameter("@p",1);Assert.AreEqual(p1.Value,p2.Value);//PASSvarx=0;p1=newSqlParameter("@p",Convert.ToInt32(x));p2=newSqlParameter("@p",x);Assert.AreEqual(p1.Value,p2.Value);//PASSp1=newSqlParameter("@p",Convert.ToInt32
考虑代码publicclassBase{publicvirtualintAdd(inta,intb){returna+b;}}publicclassDerived:Base{publicoverrideintAdd(inta,intb){returna+b;}publicintAdd(floata,floatb){return(Int32)(a+b);}}如果我创建Derived类的实例并使用int类型的参数调用Add为什么它调用带有float参数的Add方法Derivedobj=newDerived()obj.Add(3,5)//whythisiscallingAdd(floata,
我在名为Dinero的命名空间中有2个带有重载运算符的类,这些是2个类:第一个:namespaceDinero{classDollar{#regionAtributospublicDoublecant;#endregion#regionConstructorespublicDollar(){this.cant=0;}publicDollar(Doubleamount){this.cant=amount;}#endregion#regionSobrecargadeOperadorespublicstaticDollaroperator+(Euroeu,Dollardol){Dollard
编辑:这个方法实际上很有效,我问过它然后找到了解决方案。我在重载的ShowDialog()方法中添加了正确的调用(它不完全是重载,甚至不是覆盖,但它的工作原理是一样的。我的新问题是底部的问题。我有一个表单,您可以在其中单击三个按钮之一。我为返回的结果定义了一个枚举。我要调用电话:MyFormResultsres=MyForm.ShowDialog();我可以用这段代码添加一个新的ShowDialog方法:publicnewMyFormResultsShowDialog(){//Showmodaldialogbase.ShowDialog();//ThisworksandsomehowI
我有2个这样重载的C#函数:privatevoid_Insert(Hashtablehash,stringtablename,Funccommand)privatevoid_Insert(Hashtablehash,stringtablename,Funccommand)基本上一个使用OleCommand,另一个使用SqlCommand作为函数的返回值。但丑陋的是,我必须将函数指针转换为正确的类型,即使我觉得编译器应该能够毫无问题地解析它:classRemoteDatabase{publicSqlCommandGetCommand(stringquery,object[]values)
对于以下情况,C#(或任何支持方法重载的面向对象语言)是否有某种约定?假设我有一个方法foo:publicvoidFoo(inta){//doesstuff}但实际上我有3个方法foo:publicvoidFoo(inta){}publicvoidFoo(inta,doubleb){}publicvoidFoo(floatc,inta,doubleb){}是否有一个约定来说明参数的顺序在重载方法中是否重要?请注意第三种方法如何没有明显的逻辑级数(a,b,c)。 最佳答案 是的。看看https://msdn.microsoft.com
我想知道以下是否可行。创建一个接受匿名类型(string、int、decimal、customObject等)的类,然后具有根据类型执行不同操作的重载方法。示例classTestClass{publicvoidGetName(){//doworkknowingthatthetypeisastring}publicstringGetName(){//doworkknowingthatthetypeisanint}publicstringGetName(intaddNumber){//doworkknowingthatthetypeisanint(overloaded)}publicstr
让我们假设我定义了这三个方法:intF1(int,int);intF1(float,float);FloatF1(int,int);我在这里调用方法F1:Console.writeline(F1(5,6).ToString()));它将调用哪个方法,为什么? 最佳答案 第一个和第三个函数不会在同一个命名空间中编译。这是因为函数签名是根据参数的类型和数量来区分的,这些都是一样的。返回类型不被视为方法签名的一部分。如果namespace中只有第一个和第二个(或第二个和第三个),将调用最合适的那个(传入整数类型的那个,因为您正在传递整数)