在 C# 中扩展现有类而不创建新类的方法

Eps*_*ool 0 c# methods inheritance extending-classes

我有一个很好的完整课程,正在做很棒的事情。我需要通过替换其中的一些方法来允许用户使用这个类,但是不允许继承,因为这个类在其他应用程序类中也有使用。

就像您有一个创建表格的类,但是您需要允许用户重新定义创建表格单元格的方法,以便用户在此单元格中打印自定义内容。但是,该类具有打印单元格内容的默认方式(以防用户不需要对其进行自定义)。

是否有任何常用或标准化的方法来实现这一目标?

Xav*_*r J 7

更新

“花生画廊”指出我的方法(底部)不符合要求,这是另一种方法:

使用委托。使用 Action 或 Func 类型定义某些公共属性。如果需要在代码中调用这些行为,请将属性与 null 进行比较。如果为 null,则使用您的默认行为。如果没有,请调用这些值。

您的调用代码可以设置属性,但不是必须的。

(第一次尝试)替代方法:

您正在描述扩展方法,或者如果可以使用继承。

扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但它们被称为扩展类型上的实例方法。对于用 C# 和 Visual Basic 编写的客户端代码,调用扩展方法和在类型中实际定义的方法之间没有明显区别。

https://msdn.microsoft.com/en-us//library/bb383977.aspx

继承与封装和多态一起是面向对象编程的三个主要特征(或支柱)之一。继承使您能够创建重用、扩展和修改在其他类中定义的行为的新类。成员被继承的类称为基类,继承这些成员的类称为派生类。派生类只能有一个直接基类。但是,继承是可传递的。如果 ClassC 派生自 ClassB,而 ClassB 派生自 ClassA,则 ClassC 继承在 ClassB 和 ClassA 中声明的成员。

https://msdn.microsoft.com/en-us/library/ms173149.aspx

您不能从所有 .NET 类型派生,但可以为它们编写扩展方法。