在扩展类上设置自定义值

本文关键字:自定义 设置 扩展 | 更新日期: 2023-09-27 17:50:06

我不确定这是否可能。我遇到了一个处理客户端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();
    }
}

在扩展类上设置自定义值

如果你想真正地扩展一个类,你可以这样做:

public class BaseClass
{
    //.. No Editable Access
}
public class Extended : BaseClass
{
    public bool FlaggedAsDeleted { get; set; }
}

如果您试图向现有类添加数据,您有两个选择:

  1. 继承-如上所示

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


c#提供了一个叫做扩展方法的特性,它允许你向现有的类添加方法。然而,这些实际上只是语法糖,因为您仍然受限于类的公共API。
public class BaseClass
{
    public int Value { get; set; }
}
public static class ExtensionMethods
{
    public static void Increment(this BaseClass b)
    {
        b.Value += 1;
    }
}

扩展方法不允许您向现有的类添加数据。

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