创建一个扩展方法来覆盖不同的 类
Create an extension method to override from different classes
我有不同的 class 全部覆盖 ToString()
函数并且它们都使用相同的逻辑
我现在正在做的是为那些 classes 调用一个静态方法,我想知道是否可以创建一个扩展方法来调用所有那些ToString()
方法
这是我目前所拥有的
public class A
{
public override string ToString()
{
return Helper.myToString(this);
}
}
public class B
{
public override string ToString()
{
return Helper.myToString(this);
}
}
和myToString()
public static string myToString(object obj)
{
///do stuff
}
我创建了一个这样的扩展方法
静态 class 扩展方法
{
public 静态字符串 myStoString(这个对象 obj)
{
//做东西
}
}
但我不知道怎么称呼它,甚至不知道它是否可能
你目前的做法是可以的。
扩展方法也是静态方法。在运行时不会有任何区别,只是语法一个:
this.myToString()
而不是
Helper.myToString(this)
由于为 object
编写扩展方法不是一个好的选择(它将适用于所有内容),Helper
class 更可取。
您可以像这样创建一个空界面:
public interface IPrintable { }
现在更改您的 class 声明,使它们实现该接口
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();
我有不同的 class 全部覆盖 ToString()
函数并且它们都使用相同的逻辑
我现在正在做的是为那些 classes 调用一个静态方法,我想知道是否可以创建一个扩展方法来调用所有那些ToString()
方法
这是我目前所拥有的
public class A
{
public override string ToString()
{
return Helper.myToString(this);
}
}
public class B
{
public override string ToString()
{
return Helper.myToString(this);
}
}
和myToString()
public static string myToString(object obj)
{
///do stuff
}
我创建了一个这样的扩展方法
静态 class 扩展方法 { public 静态字符串 myStoString(这个对象 obj) { //做东西 } }
但我不知道怎么称呼它,甚至不知道它是否可能
你目前的做法是可以的。
扩展方法也是静态方法。在运行时不会有任何区别,只是语法一个:
this.myToString()
而不是
Helper.myToString(this)
由于为 object
编写扩展方法不是一个好的选择(它将适用于所有内容),Helper
class 更可取。
您可以像这样创建一个空界面:
public interface IPrintable { }
现在更改您的 class 声明,使它们实现该接口
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();