如何在.NET Framework或ASP.NET中实现/使用Polymorphism和Abstract类

时间:2011-02-11 03:40:40

标签: .net

我无法理解.NET Framework或ASP.NET中Polymorphism和Abstract类的用法。我知道多媒体在阅读互联网上的各种文章后意味着什么,但是,它们是通用的(或者在我看来)。但我无法将其与.NET中的具体内容联系起来。例如,为什么.NET Framework中的特定类标记为抽象。如果有人可以解释,我会更好地了解它的需要。同样对于多态性。

我希望我清楚自己所要求的内容,并希望得到一些非常好的解释。

谢谢

3 个答案:

答案 0 :(得分:3)

XmlReader class是多态性的一个很好的例子。一个针对XmlReader的程序,它是一个抽象类,但您使用的实际实例是具体的派生类。

使用哪个派生类并不重要。您通常不会知道正在使用哪个类,因为您打算使用工厂方法'XmlReader.Create()'来创建实例。

答案 1 :(得分:0)

让我们扩展约翰为你建议的例子。 类XmlReader被标记为抽象 - 在C#中,您明确地将类声明为抽象,如: 公共抽象类XmlReader:IDisposable {} 该类还可以具有声明为抽象的方法或属性,如 public abstract void Close(); 抽象类在属性和方法中声明的是所有继承类必须实现的接口。 它表明了图书馆设计师引领和指导界面发展的愿望。派生的classesSystem.Xml.XmlNodeReader,System.Xml.XmlTextReader,System.Xml.XmlValidatingReader都必须具有为XmlReader类声明的所有方法。

答案 2 :(得分:0)

使用抽象类的时间是指有两个或更多类共享重要特征,但基类本身没有意义There are different types of polymorphism,但我认为你所指的那种方式很适合当你有两种类型的方法执行相同的任务时,但是根据它们的类型以不同的方式。

例如,假设您有一个名为animal的基类。它已经传达了许多信息:所有动物都具有大小,形状,温暖/冷血和腿数等特性。所有动物都有某些行为,如移动和进食,尽管它们并不总是以同样的方式进行。

然而,说“院子里有动物”或“请在宠物商店给我买动物”是没有意义的。你会立刻被问到:“什么样的动物?”你的听众不知道如何反应,直到他知道它是长尾小鹦鹉还是灰熊。

因此animal抽象类将包含所有动物共享的方法和属性,而派生类dogcatsparrow将实现它们,并提供一些他们自己的。多态性出现的地方是两只动物做同样的事情,但它们以不同的方式做。这是一个例子:

abstract class Animal
{
    public abstract void Move(int distance);
}
class Dog : Animal
{
    public override void Move(int distance)
    {
        Console.WriteLine("Walking " + distance + " feet.");
    }
} 
class Sparrow : Animal
{
    public override void Move(int distance)
    {
        Console.WriteLine("Flying " + distance + " feet.");
    }
} 

当您在程序中使用多态时,多态性就会发挥作用。你有一堆动物;也许他们有不同的类型,或者你可能不知道他们是什么类型。你希望他们都向前移动10英尺,但你不关心他们是如何到达那里的。因此,您可以调用所有动物都拥有的Move方法,即使它们都以不同的方式实现它:

class Program
{
    void MoveAnimal(Animal animal)
    {
        animal.Move(10);
    }
//...
}

现在你的飞行动物会飞,你的行走动物会走路,但它们都会移动相同的距离,这正是你真正想要的。这种多态的一些实际应用:

  • 在ASP.NET中呈现一组WebControl:您希望所有内容都显示在页面中,但它们看起来并不一样。
  • 使用一堆IEnumerable.ContainsLinkedList<T>个对象的List<T>方法。他们都会寻找你正在寻找的东西,但他们会用不同的策略来找到它。

希望有所帮助。