0

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

}
4

2 回答 2

3

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

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

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

于 2014-03-14T03:10:01.197 回答
0

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

于 2014-03-14T03:10:12.303 回答