Tag: 重载

具有可空值类型参数的扩展方法解析

public static class Extension { public static void Test(this DateTime? dt) { } } void Main() { var now = DateTime.Now; Extension.Test(now); // ok now.Test(); // compile time error } 我只是好奇,为什么编译器在作为扩展名调用时无法解析相同的方法?

使用可选参数重载方法

我有一个类如下,有两个重载方法。 Class A { public string x(string a, string b) { return “hello” + a + b; } public string x(string a, string b, string c = “bye”) { return c + a + b; } } 如果我从具有两个参数的另一个类调用方法x ,那么将执行哪个方法以及为什么? 即 string result = new A().x(“Fname”, “Lname”); 我在我的控制台应用程序中测试了这个,并且执行了2个参数的方法。 有人可以解释一下吗?

仅基于返回类型重载

我有一种情况,我想从这个函数返回List public DataTable GetSubCategoriesBySubCatID(Guid SubCategoryID) 所以我想要的是 public List GetSubCategoriesBySubCatID(Guid SubCategoryID) 我知道仅基于返回类型不支持重载,我只是不想在两个函数中复制相同的代码。 什么是实现这一目标的最佳方式,而不会影响第一个function的参考

使用generics属性调用重载方法会调用错误的重载

我有一个基本的filter类,存储string参数名称和通用T值。 filter有一个方法Write(writer As IWriter) ,它将filter的内容写入HTML页面。 Write方法有两个重载,一个带两个字符串,它接受一个字符串和一个对象。 这让我自动引用字符串。 问题是,当我调用writer.Write(ParameterName, Value)而T是一个string ,它调用字符串/对象的重载,而不是字符串/字符串! 如果我直接在编写器上调用Write方法,它将按预期工作。 这是C#中的SSCE。 我在VB和C#中测试了这个,发现了同样的问题 void Main() { FooWriter writer = new FooWriter(); Filter f = new Filter() {ParameterName = “param”, Value = “value”}; f.Write(writer); //Outputs wrote w/ object writer.Write(f.ParameterName, f.Value); //Outputs wrote w/ string } class FooWriter { public void Write(string name, object value) { Console.WriteLine(“wrote […]

重载null歧义

我有以下方法: void Method(string param1, string param2); void Method(string param1, object param2); 当我使用以下方法调用该方法时: method(“string”, null); 它给出了一个错误,因为调用是模糊的,编译器不知道要调用哪个版本,因为两个方法都接受null作为第二个参数。 如何在不更改其中一个方法名称的情况下克服此问题? 第一个方法永远不会为null 。

在C#中重载复合赋值运算符的简单方法?

有没有人有一个非常简单的例子,说明如何在C#中重载复合赋值运算符?

当两个重载具有相同的签名时,调用构造函数重载

考虑以下课程, class Foo { public Foo(int count) { /* .. */ } public Foo(int count) { /* .. */ } } 上面的代码无效,不会编译。 现在考虑以下代码, class Foo { public Foo(int count) { /* .. */ } public Foo(T t) { /* .. */ } } static void Main(string[] args) { Foo foo = new Foo(1); } 以上代码有效且编译良好。 […]

在C#中重载属性

好吧,我知道C#不支持属性重载 – 大多数参考文献通过引用单方法 – 不同 – 返回类型问题来解释它。 然而,怎么样的二传手呢? 我想直接将值指定为字符串或对象,但只返回字符串。 像这样: public string FieldIdList { get { return fieldIdList.ToString(); } set { fieldIdList = new FieldIdList(value); } } public FieldIdList FieldIdList { set { fieldIdList = value; } } private FieldIdList fieldIdList; 为什么不允许这样做? 我还看到“属性”只是在编译时创建getter / setter函数。 是否可以创建自己的? 就像是: public void set_FieldIdList(FieldIdList value) { fieldIdList = value; […]

尝试调用有效方法重载时出现奇怪的“程序集未引用”错误

我在Assembly A使用方法重载: public static int GetPersonId(EntityDataContext context, string name) { var id = from … in context… where … select …; return id.First(); } public static int GetPersonId(SqlConnection connection, string name) { using (var context = new EntityDataContext(connection, false)) { return GetPersonId(context, name); } } 当我尝试从Assembly B调用第二个重载时,VS会产生以下编译时错误: “System.Data.Entity.DbContext”类型在未引用的程序集中定义。 您必须添加对程序集’EntityFramework,Version = 6.0.0.0,Culture = neutral,PublicKeyToken = …’的引用。 […]

为什么这样做? 方法重载+方法重写+多态

在以下代码中: public abstract class MyClass { public abstract bool MyMethod( Database database, AssetDetails asset, ref string errorMessage); } public sealed class MySubClass : MyClass { public override bool MyMethod( Database database, AssetDetails asset, ref string errorMessage) { return MyMethod(database, asset, ref errorMessage); } public bool MyMethod( Database database, AssetBase asset, ref string errorMessage) { // […]