65.9K
CodeProject 正在变化。 阅读更多。
Home

多态中的部分类

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.18/5 (5投票s)

2007年10月26日

CPOL

2分钟阅读

viewsIcon

29034

downloadIcon

334

使用 C# 在多态中实现部分类。

Screenshot - PartPoly.jpg

引言

部分类是 .NET 中最酷的类型之一。它允许我们将定义和实现分解为多个类。本文帮助您了解如何使用部分类型进行多态处理。

背景

假设我们了解多态。本文说明了普通多态和部分类型多态之间的区别,以及多态和部分类型的结合使用。

部分类实现

下面的示例代码在抽象类中实现了部分类型。AbstractClass 类有两个同名的部分类型声明。在第一个 AbstractClass 实现中,它有两个名为 GetMessageGetClassID 的方法。在第二个 AbstractClass 实现中,它有一个名为 GetClassName 的方法。MainAbstractClass 继承了 AbstractClass 基类。我们有两个部分类,但所有方法都在单个继承中被调用。

// Partial types in abstract class.
namespace PartialClassPoly
{
    public abstract partial class AbstractClass
    {
        public abstract string GetMessage();
        public abstract int GetClassID();
    }
    public abstract partial class AbstractClass
    {
        public abstract string GetClassName();
    }
    
    public class MainAbstractClass : AbstractClass
    {
        public override string GetMessage()
        {
            return "Message from AbstractClass";
        }
        public override int GetClassID()
        {
            return 1;
        }
        public override string GetClassName()
        {
            return "AbstractClass"; 
        }
    }
}

下面的示例代码在接口中实现了部分类型。pInterface 接口有两个同名的部分类型声明。在第一个 pInterface 实现中,它有一个名为 GetMessage 的方法。在第二个 pInterface 实现中,它有两个名为 GetClassIDGetClassName 的方法。MainPolyInterfaces 实现了 pInterface 接口。我们有两个部分接口,但所有方法都在单个接口实现中被调用。

// Partial types in Interfaces.
namespace PartialClassPoly
{
    public partial interface pInterface
    {
        string GetMessage();
    }
    public partial interface pInterface
    {
        int GetClassID();
        string GetClassName();
    }

    public class MainPolyInterfaces :  pInterface
    {
        public string GetMessage()
        {
            return "Message from PolyInterfaces";
        }
        public int GetClassID()
        {
            return 2;
        }
        public string GetClassName()
        {
            return "PolyInterfaces";
        }
    }
}

下面的示例代码在虚方法中实现了部分类型。VirtualMethods 类有两个同名的部分类型声明。在第一个 VirtualMethods 实现中,它有两个名为 GetMessageGetClassID 的方法,在第二个 VirtualMethods 实现中,它有一个名为 GetClassName 的方法。MainVirtualMethods 继承了 VirtualMethods 基类。我们有两个部分类,但所有方法都在单个继承中被调用。

// Partial types in virtual methods.
namespace PartialClassPoly
{
    public partial class VirtualMethods
    {
        public virtual string GetMessage()
        {
            return "Message from Virtual Methods";
        }
        public virtual int GetClassID()
        {
            return 3;
        }
    }
    public partial class VirtualMethods
    {
        public virtual string GetClassName()
        {
            return "VirtualMethods";
        }
    }
    public class MainVirtualMethods : VirtualMethods
    {
        public override string GetMessage()
        {
            return "Message from MainVirtualMethods";
        }
        public override int GetClassID()
        {
            return 4;
        }
        public override string GetClassName()
        {
            return "MainVirtualMethods";
        }
    }
}

关注点

在多态中实现部分类型为面向对象编程设定了边界。上述部分类型实现使用多态中的重写概念表示,并且可以使用多态中的重载概念以相同的方式进行实现。简而言之,部分类型可以将一个类分解为具有相同名称的类。

历史

  • 创建于 2007 年 10 月 26 日。
© . All rights reserved.