多态和接口以及is和as运算符

Posted 马MZJ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多态和接口以及is和as运算符相关的知识,希望对你有一定的参考价值。

多态:

继承同一个父类的多个子类各自之间都是独立的,各自的使用都是不同的。

父类中可以出现虚方法,虚方法在子类中通过重写使用。

虚方法:virtual   重写:override

 1 class Ren
 2     {
 3         public void chifan()
 4         {
 5             Console.WriteLine("我必须得吃饭!");
 6         }
 7 
 8         public virtual void xihuanchi()//虚方法
 9         {
10             Console.WriteLine("喜欢吃肉,蔬菜,水果!");
11         }
12 
13     }
14 
15 
16  class Nan : Ren
17     {
18         public override void xihuanchi()//重写
19         {
20             Console.WriteLine("我是男人,我只喜欢吃肉!");
21         }
22 
23         public void zuqiu()
24         {
25             Console.WriteLine("我喜欢足球!");
26         }
27     }

 

父类又称作基类,子类又称作派生类或者超类。

抽象类:abstract

抽象类就是用来被继承的,不能实例化,因为没有构造函数,抽象方法不能有方法主体,只能定义方法的结构。抽象方法或者抽象属性只能存在与抽象类中,但是抽象类中不一定只存在抽象方法和抽象属性。

 1 abstract class Ren//抽象类
 2     {
 3         public virtual void chifan()
 4         {
 5             Console.WriteLine("用嘴吃饭!");
 6         }
 7 
 8         public abstract void xihuanchi();//抽象方法
 9 
10     }

 

 

 

 

接口:

在团队开发中,一个类需要继承多个类,但是父类只能有一个,所以出现了接口。

接口里面的方法很像抽象方法,用interface定义。

1  public interface Sports//接口
2     {
3         void Sport1();
4     }

 

 

 

is和as运算符:

is是判断是否是某个类型,返回true或者false。

as是转换数据类型,如果转换不成功不会报错,二十返回一个null值。

 1             ArrayList arr = new ArrayList();
 2 
 3             Ren r = new Ren();
 4            
 5             Random ran = new Random();
 6 
 7             arr.Add(r);
 8             arr.Add(ran);
 9 
10             foreach (object o in arr)
11             {
12                 Ren rr = o as Ren;
13                 if (rr != null)//判断是否转换成功
14                 {
15                     rr.chifan();
16                 }
17                 else
18                 {
19                     Console.WriteLine("没转换成功!");
20                 }
21             }
22             foreach (object o in arr)
23            {
24                 Ren rr = o as Ren;
25                 if( o is Ren )//判断o在进入集合之前是不是Ren这个类的
26                 {
27                     rr = o as Ren;
28                 }
29            }

 

以上是关于多态和接口以及is和as运算符的主要内容,如果未能解决你的问题,请参考以下文章

多态类库委托is和as运算符泛型集合

11月27日--面向对象:多态类库委托is和as运算符泛型集合

is 和 as 运算符

C#—类库委托is和as运算符泛型集合

c# -- is和as运算符

Is 运算符使用,以及as运算符向下类型转换