在Extended类上设置自定义值

时间:2014-03-14 03:06:55

标签: c# extending-classes

我不确定是否可能。我遇到了一个处理客户端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 个答案:

答案 0 :(得分:3)

如果您正在尝试扩展一个类,那么就这样做:

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

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

如果您尝试将数据添加到现有类,则有两种选择:

  1. 继承 - 如上所示。

  2. 封装 - 创建一个新对象,其中包含您要添加的类型的实例。


  3. 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;
        }
    }
    

    扩展方法不允许您将数据添加到现有类中。

答案 1 :(得分:0)

这不是唯一的。这是使用名为decorator的设计模式解决的常见问题。