C# 创建一个扩展方法以从不同的类重写
我有不同的类,所有这些类都重写C# 创建一个扩展方法以从不同的类重写,c#,class,overriding,extension-methods,tostring,C#,Class,Overriding,Extension Methods,Tostring,我有不同的类,所有这些类都重写ToString()函数,它们都使用相同的逻辑 我现在要做的是为这些类中的一个调用一个静态方法,我想知道是否有可能创建一个扩展方法,该方法将从这些ToString()方法中调用 这就是我目前所拥有的 public class A { public override string ToString() { return Helper.myToString(this); } }
ToString()
函数,它们都使用相同的逻辑
我现在要做的是为这些类中的一个调用一个静态方法,我想知道是否有可能创建一个扩展方法,该方法将从这些ToString()
方法中调用
这就是我目前所拥有的
public class A
{
public override string ToString()
{
return Helper.myToString(this);
}
}
public class B
{
public override string ToString()
{
return Helper.myToString(this);
}
}
和myToString()
我创建了这样一个扩展方法
静态类扩展方法
{
公共静态字符串myStoString(此对象obj)
{
//做事
}
}
但是我不知道怎么称呼它,或者它是否可能,你目前的方法还可以 扩展方法也是静态方法。运行时不会有任何区别,只是语法不同:
this.myToString()
而不是
Helper.myToString(此)
由于为
对象
编写扩展方法不是一个好选择(它将适用于所有情况),Helper
类更可取。您当前的方法还可以
扩展方法也是静态方法。运行时不会有任何区别,只是语法不同:
this.myToString()
而不是
Helper.myToString(此)
由于为
对象
编写扩展方法不是一个好的选择(它将适用于所有情况),帮助程序
类更可取。您可以创建一个如下的空接口:
public interface IPrintable { }
现在更改类声明,使它们实现该接口
public class A : IPrintable
{
// ...
}
public class B : IPrintable
{
// ...
}
因为接口是空的,所以不需要其他更改。然后您可以将扩展方法写入IPrintable
public static class ExtensionMethods
{
public static string MyToString(this IPrintable printable)
{
// do stuff
}
}
并使用它:
// will work
var a = new A();
a.MyToString();
// will not work
var c = 10;
c.MyToString();
您可以创建一个空界面,如下所示:
public interface IPrintable { }
现在更改类声明,使它们实现该接口
public class A : IPrintable
{
// ...
}
public class B : IPrintable
{
// ...
}
因为接口是空的,所以不需要其他更改。然后您可以将扩展方法写入IPrintable
public static class ExtensionMethods
{
public static string MyToString(this IPrintable printable)
{
// do stuff
}
}
并使用它:
// will work
var a = new A();
a.MyToString();
// will not work
var c = 10;
c.MyToString();
请记住,您需要在一个单独的静态类中声明扩展方法。请记住,您需要在一个单独的静态类中声明扩展方法。谢谢,但您能否解释一下,为对象编写扩展方法不是一个好的选择?在.NET中的每种类型都派生自
System.object
。在您的情况下,您将能够编写123.myToString()
或foo.myToString()
,因为int
或string
也是对象。我怀疑您是否想要它。谢谢,但您能解释一下为object编写扩展方法的更多信息吗?在.NET中,每种类型都是从System.object
派生的。在您的情况下,您将能够编写123.myToString()
或foo.myToString()
,因为int
或string
也是对象。我怀疑你想要它。