Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 设计基类时的继承策略_C#_Inheritance - Fatal编程技术网

C# 设计基类时的继承策略

C# 设计基类时的继承策略,c#,inheritance,C#,Inheritance,我在设计阶段有一个基类和一个派生类。基类将保持为一个,但许多派生类将从中继承。因此,在将来对派生类进行更改是非常昂贵的,我正在寻找最好的设计来防止这种情况 事实上,派生类只需要重写几个方法(如果需要的话),但很容易向它透露更多细节 我的问题是关于未来可扩展的政策 如果需要,我是否可以在不更改派生类的情况下,将继承的方法/属性最小化到派生类,并在下一个版本中显示更多 或者我应该透露将来派生类可能使用的任何东西,让它们选择是否需要它们 谢谢您可以在以后将更多的方法和属性从私有更改为受保护。唯一的规则

我在设计阶段有一个基类和一个派生类。基类将保持为一个,但许多派生类将从中继承。因此,在将来对派生类进行更改是非常昂贵的,我正在寻找最好的设计来防止这种情况

事实上,派生类只需要重写几个方法(如果需要的话),但很容易向它透露更多细节

我的问题是关于未来可扩展的政策

如果需要,我是否可以在不更改派生类的情况下,将继承的方法/属性最小化到派生类,并在下一个版本中显示更多

或者我应该透露将来派生类可能使用的任何东西,让它们选择是否需要它们


谢谢

您可以在以后将更多的方法和属性从私有更改为受保护。唯一的规则是现有的受保护成员不能再被私有化

我现在肯定会尽量减少受保护方法的数量。预测未来总是很困难的,在开发/设计一个类的过程中会有太多的事情发生变化,所以最好的办法是保留它,并为你现在知道的做最好的设计,而不是为将来某个时候可能需要或可能需要的做最好的设计。

除了其他人发布的内容,你会想考虑谁是你的基类的目标受众。它们是打算由您的客户或其他外部消费者扩展的API或框架的一部分,还是该抽象完全由您自己控制(即,只有您将实现派生)


根据答案,您可能需要非常仔细地考虑您公开的基类——设计一个好的、灵活的继承方案可能很困难。

没有API,它完全在我的控制之下。派生类还实现了一个接口,这个接口当然也由基类实现。