知识大全 浅谈.NET中不一样的多态
Posted 知
篇首语:得意犹堪夸世俗,诏黄新湿字如鸦。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 浅谈.NET中不一样的多态相关的知识,希望对你有一定的参考价值。
浅谈.NET中不一样的多态 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
在 NET中 多态通常意味着子类对于父类一种衍变 子类继承自父类 拥有父类所定义的一切(public或protected)成员 但同时 它又可以修改(重写或复写)这些成员 使其实现与父类以及其他子类完全不同 我们可以说 继承体现了类的多态性
大家应该很熟悉Duck的例子了吧?
- public abstract class Duck public abstract void Quack(); public class MallardDuck : Duck public override void Quack() Console WriteLine( Quack quack quack ); public class RubberDuck : Duck public override void Quack() Console WriteLine( Squeak squeak squeak ); public class Program public static void Main() Duck duck = new MallardDuck(); duck Quack(); duck = new RubberDuck(); duck Quack(); Console ReadLine();
MallardDuck和RubberDuck虽然都继承自抽象类Duck 同样拥有Quack()方法 但它们却有不同的实现 产生不同的结果 在声明Duck类型时 既可以实例化为Mallard 也可以实例化为RubberDuck 或者是其他继承自Duck的类 在运行时 将自动调用各个子类的实现
多态的这些特性使依赖注入和面向抽象编程成为可能 其重要性不言而喻
不一样的多态然而 既然多态是指同一类事物之间的不同形态 那么我们为什么要把对于多态的理解局限于类的继承关系呢?在 NET中是否还存在着非继承关系的多态性呢?
泛型体现了参数的多态性
类型参数在泛型中通常解释为占位符 而我更愿意将其理解为对参数的一种抽象 以最常见的List
- public class MyList<T> private T[] items; private int size; public void Add(T item) if (size == items Length) // modify capacity items[size++] = item;
如果我们使用MyList
您是否也觉得这是多态性的一种体现呢?
再来看看十分经典的Swap
- public class Swapper private static void Swap<T>(ref T o ref T o ) T temp = o ; o = o ; o = temp;
Swap
委托体现了方法的多态性
委托是对拥有相同参数和返回值的所有方法的封装 只要方法拥有同样的参数列表和返回值 委托都认为它们属于同一 类型 的方法 可以添加到同一个委托链表中
- public delegate void FooDelegate(List<string> list string str); public class DelegateTest public void AddToList(List<string> list string strToAdd) list Add(strToAdd); public static void PrintIfContains(List<string> list string strToCheck) if (list Contains(strToCheck)) Console WriteLine( The list contains + strToCheck); public class Program public static void Main() List<string> list = new List<string>(); list Add( Kirin ); DelegateTest delegateTest = new DelegateTest(); FooDelegate fooDelegate = new FooDelegate(delegateTest AddToList); fooDelegate += new FooDelegate(DelegateTest PrintIfContains); fooDelegate(list 麒麟 NET ); Console ReadLine();
在上例中 FooDelegate委托封装了参数为List
内部实现完全不同 但是它们却可以添加到同一个委托链表中 也就是说 同一个委托 可以定义并调用不同的方法(约束相同而实现不同)
您是否也认为这是方法的多态性的一种体现呢?
多态小结
我们通常所讨论的多态 就是指子类对父类方法的重写(虚方法)或覆蓋(非虚方法) 这样的理解未免过于狭隘 NET强大的特性能够实现其他语言中无法实现的多态性 如本文所列举的泛型和委托 您是否认同笔者的观点呢?如果认同 您是否还能举出其他的例子呢?
cha138/Article/program/net/201311/11780相关参考
锚头鳋病(别名:针虫病、蓑衣病、铁锚虫病)1、病源:主要有四种:寄生于鲢、鳙和鳊鱼体表、口腔的多态锚头鳋,寄生于草鱼鳞片下的草鱼锚头鳋,寄生于鳃弧上的四球锚头鳋,寄生于鲤、鲫、鲢、鳙、青、乌鳢和鳗鲡等
ASP.NET中不定级动态菜单的实现 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!我们平时IEWe
浅谈.Net中的对象相等 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Net中对象相等比较是看
浅谈.NET重写URL 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 具体使用方法 首先nfi
浅谈.NET里的MTS 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!事务处理模式是为参与事务处理的
浅谈ASP.NET报表控件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 项目中有报表图形化的需
浅谈.NET中加密和解密的实现方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! NET将原来独
浅谈ASP.NET内部机制(三) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 大家已经在知道在
浅谈ASP.NET的内部机制(一) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 前言当一个Ht
浅谈ASP.NET的内部机制(二) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 上次已经说到了