![](/img/trans.png)
[英]Is it possible to create an extension method for all classes excluding primitives in C#?
[英]Create an extension method to override from different classes
我有不同的類,它們都重寫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()
public static string myToString(object obj)
{
///do stuff
}
我創建了這樣的擴展方法
靜態類ExtensionMethods {公共靜態字符串myStoString(此對象obj){//做某事}}
但我不知道怎么稱呼它,甚至可能
您當前的方法還可以。
擴展方法也是靜態方法。 在運行時不會有任何區別,只是一種語法:
this.myToString()
代替
Helper.myToString(this)
由於為object
編寫擴展方法不是一個好選擇(它將適用於所有對象),因此最好使用Helper
類。
您可以這樣創建一個空接口:
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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.