Создать метод расширения для переопределения из разных классов - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть разные классы, которые все переопределяют 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 (this object obj) {// do stuff}}

но я этого не делаюзнаю, как это назвать или, если возможно,

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Вы можете создать пустой интерфейс следующим образом:

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();
0 голосов
/ 05 февраля 2019

Ваш текущий подход в порядке.

Метод расширения также является статическим.Во время выполнения не будет никакой разницы, только синтаксис:

this.myToString()

вместо

Helper.myToString(this)

С момента написания расширенияметоды для object не очень хороший выбор (он будет доступен для всех), класс Helper предпочтительнее.

...