创建扩展方法以覆盖不同的类

时间:2019-02-05 09:30:29

标签: c# class override extension-methods tostring

我有不同的类,它们都覆盖ToString()函数,并且它们都使用相同的逻辑

我现在正在做的是为这些类调用一个静态方法,我想知道它有可能创建一个扩展方法,并从所有这些ToString()方法中调用< / p>

这是我到目前为止所拥有的

 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)         {             //做东西         }      }

但是我不知道怎么称呼它甚至可能

2 个答案:

答案 0 :(得分:0)

您当前的方法还可以。

扩展方法也是静态方法。在运行时不会有任何区别,只是一种语法:

this.myToString()

代替

Helper.myToString(this)

由于为object编写扩展方法不是一个好选择(它将适用于所有内容),因此最好使用Helper类。

答案 1 :(得分:0)

您可以这样创建一个空接口:

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();