Установка пользовательских значений в расширенном классе

Я не уверен, если это возможно. Я сталкиваюсь с уникальной проблемой, касающейся API клиента. Мне нужно расширить класс и добавить свойство bool, которое не существует в базовом классе.

ниже приведен пример того, что я пытаюсь достичь.

public class baseClass
{
    //.. No Editable Access
}

public class Extended
{
    public bool flaggedAsDeleted(this baseClass bc)
    {
        //Idealy was looking for get; set; but I know that don't work
        return true;// Need to know if possible to set property on baseClass or Alternative
    }

    public void flagAsDeleted(this baseClass bc)
    {
        flaggedAsDeleted = true;
    }
}

public class program
{
    public void doit()
    {
        baseClass bc = new baseClass();
        bc.flagAsDeleted();
    }

}

2 ответа

Решение

Если вы пытаетесь расширить класс, вы делаете это так:

public class BaseClass
{
    //.. No Editable Access
}

public class Extended : BaseClass
{
    public bool FlaggedAsDeleted { get; set; }
}

Если вы пытаетесь добавить данные в существующий класс, у вас есть два варианта:

  1. Наследование - как видно выше.

  2. Инкапсуляция - создайте новый объект, который содержит экземпляр типа, к которому вы добавляете.


C# предоставляет функцию под названием Extension Methods, которая позволяет, казалось бы, добавлять методы в существующие классы. Однако на самом деле это просто синтаксический сахар, поскольку вы все еще ограничены общедоступным API класса.

public class BaseClass
{
    public int Value { get; set; }
}

public static class ExtensionMethods
{
    public static void Increment(this BaseClass b)
    {
        b.Value += 1;
    }
}

Методы расширения не позволяют вам добавлять данные в существующий класс.

Это не уникально. Это общая проблема, решаемая с помощью шаблона проектирования, называемого декоратором.

Другие вопросы по тегам