我坚信,阅读代码和阅读优秀代码是优秀编程的关键。如果不是其中之一。
我在可视化方面遇到了一些问题,并且“感觉”使用继承来改善我的代码架构。
有人可以给我一些好的代码链接来模仿,其中人们以绝对的“kung-fooey无情”的方式使用继承[以一种很好的方式]
答案 0 :(得分:1)
良好使用继承的一个例子是.NET框架类。您可以下载MONO项目以获取对某些源代码的访问权限。如果您想改进代码架构,可以花一些时间研究架构设计模式。
答案 1 :(得分:1)
这是一个个人的例子,我利用继承来大大有利于发展情况:
我需要开发一个asp.net(c#)表单控件集,它允许标准Web表单(带有提交按钮的一组表单字段),以及与Web服务通信的安全版本以提交SSL上的信息。
由于控件和概念之间的所有相似之处,我开发了许多类:
BaseWebControl
System.Web.UI.WebControl
类的自定义基类控件类(.NET框架的一部分 BaseFormControl
SubmitForm
的抽象方法。此方法未在此类上定义,但它由提交按钮单击事件调用。这意味着从该基类继承的任何特定表单控件类都可以根据需要实现抽象SubmitForm
功能。 EmailFormControl
BaseFormControl
,因此它可以获得上述所有基础功能而无需重复SubmitForm
之外,SubmitForm
SecureFormControl
BaseFormControl
,因此它获得了上述所有基础功能而没有任何重复SubmitForm
的实现中,它连接到WCF Web服务并通过SSL传递信息。在精简代码表格中,总体大纲是这样的:
public class BaseWebControl : System.Web.UI.WebControl
{
//base web control with application wide functionality built in
}
public abstract class BaseFormControl : BaseWebControl
{
//handles all 'common' form functionality
//...
//...
//event handler for submit button calls abstract method submit form,
//which must be implemented by each inheriting class
protected void btnSubmit_Click(object sender, EventArgs e)
{
SubmitForm();
}
protected abstract SubmitForm();
}
public class EmailFormControl : BaseFormControl
{
protected override SubmitForm()
{
//implement specific functionality to email form contents
}
}
public class SecureFormControl : BaseFormControl
{
protected override SubmitForm()
{
//connect to WCF web service and submit contents
}
}
由于上述原因,BaseFormControl
在一大堆方法,属性等中有大约1000行代码。SecureFormControl
和EmailFormControl
各有大约40行。所有其他功能由基类共享和控制。这促进了:
现在我可以非常轻松地创建任何类型的网络表单,例如DataBaseFormControl
等。我可以通过向基类添加方法和属性等为所有表单添加很棒的新功能。
列表继续。
P P很多打字。希望这有助于您提供一个很好的例子。这是我发现继承是项目中关键成功点的一个例子。答案 2 :(得分:1)
我同意建议查看.NET基类库,因为它通过继承和接口提供了很好的抽象示例。目标是使消费者代码不必关心特定实现的细节。 WinForms设计器与Controls一起使用,但它不知道将实现哪些特定类型的控件。它并不关心,因为继承抽象了不必要的细节。 LINQ与IEnumerable的工作方式类似;枚举的内容并不重要,因为有些算法可以编写,可以使用任何可枚举的算法。两者都是很好的抽象例子。
答案 3 :(得分:1)
我坚信,阅读代码和阅读优秀代码是优秀编程的关键
很难不同意。
实际上qestion非常难 - 因为有一些继承的替代方法,例如复合重用原则,所以有时很难忽视继承是否以“kung-fooey无情”的方式使用,或者有更好的方法来实现实现相同的将使代码更容易理解/测试/使其失败耦合等等。 在我看来,企业库应用程序验证块是 Microsoft.Practices.EnterpriseLibrary.Validation.Validator 类及其所有后代 是一个非常好的继承的例子,因为
您可以从codeplex下载源代码。