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

问题描述 投票:1回答:2

我有不同的类,所有覆盖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){//做的东西}}

但我不知道该怎么称呼它,或者如果它甚至有可能

c# class override extension-methods tostring
2个回答
0
投票

您当前的做法是确定。

扩展方法是静态的方法了。不会有在运行任何区别,只是语法之一:

this.myToString()

代替

Helper.myToString(this)

由于写object扩展方法是不是一个好的选择(它将可用于一切),Helper类是优选的。


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();
© www.soinside.com 2019 - 2024. All rights reserved.