簡體   English   中英

創建擴展方法以覆蓋不同的類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM