我不确定是否可能。我遇到了一个处理客户端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();
}
}
答案 0 :(得分:3)
如果您正在尝试扩展一个类,那么就这样做:
public class BaseClass
{
//.. No Editable Access
}
public class Extended : BaseClass
{
public bool FlaggedAsDeleted { get; set; }
}
如果您尝试将数据添加到现有类,则有两种选择:
继承 - 如上所示。
封装 - 创建一个新对象,其中包含您要添加的类型的实例。
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的设计模式解决的常见问题。