Как я могу добавить метод статического расширения в существующий класс в C # - PullRequest
0 голосов
/ 27 ноября 2018
Например,

, я могу использовать Color (подобный классу здания)

Color c = Color.GreenSmile();

, это мой метод расширения, но я не хочу использовать Экземпляр.Это возможно?

   public static Color GreenSmile(this Color color)
        {
           return Color.FromArgb(83, 255, 26);
        }

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Нет, вы не можете опустить экземпляр Color, потому что методу расширения требуется экземпляр типа, который он расширяет в качестве первого аргумента, и ключевое слово this.

Я хочу статическийметод, чтобы использовать имя класса.

Вы могли бы создать новый класс Color в своем собственном пространстве имен, хотя это может вызвать путаницу.

namespace Drawing.Utilities
{
    internal class Color
    {
        public static System.Drawing.Color GreenSmile()
        {
            return System.Drawing.Color.FromArgb(83, 255, 26);
        }
    }
}

Теперь вы можете использовать этот метод так же, как и метод System.Drawing.Color:

var greenSmile = Color.GreenSmile(); // add using Drawing.Utilities;

Но, как уже упоминалось выше, это может вызвать путаницу, особенно потому, что метод возвращает тип Color, отличный отсам.Поэтому, безусловно, лучше использовать другое имя для этого класса (ColorUtility).

0 голосов
/ 27 ноября 2018

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

public static Color GreenSmile()
{
    return Color.FromArgb(83, 255, 26);
}

Теперь вы можете вызватьэто так:

Color c = MyClass.GreenSmile();
...