有人可以将我链接到一些代码,其中有很好的或很好地使用继承

时间:2010-04-22 16:58:35

标签: c# inheritance

我坚信,阅读代码和阅读优秀代码是优秀编程的关键。如果不是其中之一。

我在可视化方面遇到了一些问题,并且“感觉”使用继承来改善我的代码架构。

有人可以给我一些好的代码链接来模仿,其中人们以绝对的“kung-fooey无情”的方式使用继承[以一种很好的方式]

4 个答案:

答案 0 :(得分:1)

良好使用继承的一个例子是.NET框架类。您可以下载MONO项目以获取对某些源代码的访问权限。如果您想改进代码架构,可以花一些时间研究架构设计模式。

答案 1 :(得分:1)

这是一个个人的例子,我利用继承来大大有利于发展情况:

我需要开发一个asp.net(c#)表单控件集,它允许标准Web表单(带有提交按钮的一组表单字段),以及与Web服务通信的安全版本以提交SSL上的信息。

由于控件和概念之间的所有相似之处,我开发了许多类:

BaseWebControl

  • 继承自System.Web.UI.WebControl类的自定义基类控件类(.NET框架的一部分
  • 具有所有自定义控件(控件状态信息等)在我们的应用程序中使用的自定义属性和方法。

BaseFormControl

  • 继承自BaseWebControl,获得其所有基础功能
  • 处理基本表单功能,例如动态添加字段集,标记必填字段,添加提交按钮等。
  • 包含易于查找的标签和相关控制索引
  • 标记为抽象类,使用名为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行代码。SecureFormControlEmailFormControl各有大约40行。所有其他功能由基类共享和控制。这促进了:

  • 可维护性
  • 效率
  • 灵活性
  • 稠度

现在我可以非常轻松地创建任何类型的网络表单,例如DataBaseFormControl等。我可以通过向基类添加方法和属性等为所有表单添加很棒的新功能。

列表继续。

P P很多打字。希望这有助于您提供一个很好的例子。这是我发现继承是项目中关键成功点的一个例子。

答案 2 :(得分:1)

我同意建议查看.NET基类库,因为它通过继承和接口提供了很好的抽象示例。目标是使消费者代码不必关心特定实现的细节。 WinForms设计器与Controls一起使用,但它不知道将实现哪些特定类型的控件。它并不关心,因为继承抽象了不必要的细节。 LINQ与IEnumerable的工作方式类似;枚举的内容并不重要,因为有些算法可以编写,可以使用任何可枚举的算法。两者都是很好的抽象例子。

答案 3 :(得分:1)

  

我坚信,阅读代码和阅读优秀代码是优秀编程的关键

很难不同意。

实际上qestion非常难 - 因为有一些继承的替代方法,例如复合重用原则,所以有时很难忽视继承是否以“kung-fooey无情”的方式使用,或者有更好的方法来实现实现相同的将使代码更容易理解/测试/使其失败耦合等等。 在我看来,企业库应用程序验证块是 Microsoft.Practices.EnterpriseLibrary.Validation.Validator 类及其所有后代 是一个非常好的继承的例子,因为

  • 验证的概念很容易理解
  • 有一个很好的例子,如何在具有不同性质的对象中找到共同点(即OrCompositeValidator / DateTimeRangeValidator / ObjectCollectionValidator)
  • 我们中的许多人都试图或多或少地实现这样的事情,所以这个背景将提供更多的理解质量
  • 这很清楚(对我来说,但我可能是错的:)继承没有替代方案

您可以从codeplex下载源代码。