我是一个菜鸟,我只是在努力,2021正视自己,面对2021!

C#基础系列第六篇

前言: 完全是我在学习过程中记录的笔记,只不过分享一下让很多刚开始学习.net编程的人能够很快的学会C#语言

  1. 接口

 (1) 有时候需要考虑子类中一部分具有某些能力(方法),同时又需要考虑其多态的特征,这时候可以考虑接口

 (2)语法:

            public interface 接口名

            {

                   //成员

            }

 (3) 接口的存在就是为了被实现

 (4)有了接口以后实现该接口的子类可以赋值给这个接口的变量,就可以实现多态了

 (5)接口的存在就是为了多态

 (6)接口与类的其中一个不同点在于多"继承"(实现)

 (7)接口的使用

    interface IDriveable

              {

                     void Dirving();

              }

              class Teacher : IDriveable

              {

                     public void Dirving()

                     {

                            Console.WriteLine("终于有驾驶证了");

                     }

              }

              class Program

              {

                     static void Main(string[] args)

                     {

                            Teacher th = new Teacher();

                            th.Dirving();

                            IDriveable dir = th;

                            dir.Dirving();

                     }

              }

(8)接口的补充

       1)接口中的方法

              ->默认接口成员均是public,所以不需要考虑访问修饰符

              ->直接不写访问修饰符

                     返回值 方法名 (参数);

       2)接口的思想类中实现方法的语法:方法该怎么写就怎么写,好像没有接口存在一样

       3)接口的实现类必须实现接口中的成员

   4)接口中可以有哪些成员:抽象成员

 (9)在使用上接口与抽象类非常类似(但是接口不允许有非抽象成员,成员的语法定义不同,多继承)

 (10)在继承中有接口,又有类的时候注意:

       1)语法

              class 类名:父类,接口,接口

              {

              //成员

              }

  2)多个接口中如果有重名方法怎么办?

              ->使用显示实现接口的方式

              ->方法名是有接口名引导的

              ->方法没有访问修饰符

              ->方法不能被该类型的实例对象说调用,必须将其转换为接口类型进行调用

          

接口的实现
 1                   interface Iinter1
 2 
 3                             {
 4 
 5                                    void Func();
 6 
 7                             }
 8 
 9                             interface Iinter2
10 
11                             {
12 
13                                    void Func();
14 
15                             }
16 
17                             class MyClass : Iinter1, Iinter2
18 
19                             {
20 
21                                    void Iinter1.Func()
22 
23                                    {
24 
25                                           Console.WriteLine("接口1");
26 
27                                    }
28 
29                                    void Iinter2.Func()
30 
31                                    {
32 
33                                           Console.WriteLine("接口2");
34 
35                                    }
36 
37                             }
38 
39                             class Program
40 
41                             {
42 
43                                    static void Main(string[] args)
44 
45                                    {
46 
47                                           MyClass m = new MyClass();
48 
49                                           Iinter1 i1 = m;
50 
51                                           i1.Func();
52 
53                                           Iinter2 i2 = m;
54 
55                                           i2.Func();
56 
57                                    }
58 
59                             }

 

  1. 使用接口模仿一个山寨的暗黑游戏的接口原理

  

接口实现暗黑游戏的一点山寨
  1  (1) 首先新建一个控制台应用程序,自己随便起个名字
  2 
  3  (2)在新建一个接口,起名为interfaceModel,这个接口实现了攻击的种类
  4 
  5             interface IFile //火系攻击
  6 
  7             {
  8 
  9                    void Fight();
 10 
 11             }
 12 
 13             interface IIce //冰系攻击
 14 
 15             {
 16 
 17                    void Fight();
 18 
 19             }
 20 
 21  (3)其次新建一个可以实现所有攻击方法的类
 22 
 23             /// <summary>
 24 
 25             /// 一个可以实现所有方法的类
 26 
 27             /// </summary>
 28 
 29             abstract class Person
 30 
 31             {
 32 
 33                    public abstract void Gongji();
 34 
 35             }
 36 
 37  (4)新建一个fashi类,此类实现了法师的所有的攻击手段
 38 
 39          abstract class fashi : Person
 40 
 41             {
 42 
 43             }
 44 
 45             class fashi1 : fashi, IFile
 46 
 47             {
 48 
 49                    public void Fight()
 50 
 51                    {
 52 
 53                           Console.WriteLine("火攻");
 54 
 55                    }
 56 
 57                    public override void Gongji()
 58 
 59                    {
 60 
 61                           Fight();
 62 
 63                    }
 64 
 65             }
 66 
 67             class fashi2 : fashi, IIce
 68 
 69             {
 70 
 71                    public void Fight()
 72 
 73                    {
 74 
 75                           Console.WriteLine("冰攻");
 76 
 77                    }
 78 
 79                    public override void Gongji()
 80 
 81                    {
 82 
 83                           Fight();
 84 
 85                    }
 86 
 87             }
 88 
 89             class fashi3 : fashi, IFile, IIce
 90 
 91             {
 92 
 93                    public override void Gongji()
 94 
 95                    {
 96 
 97                           //随机的攻击
 98 
 99                           Random rand = new Random();
100 
101                           if (rand.Next() % 2 == 0)
102 
103                           {
104 
105                                  IIce i = this as IIce;
106 
107                                  i.Fight();
108 
109                           }
110 
111                           else
112 
113                           {
114 
115                                  (this as IFile).Fight();
116 
117                           }
118 
119                    }
120 
121                    void IFile.Fight()
122 
123                    {
124 
125                           Console.WriteLine("火攻");
126 
127                    }
128 
129                    void IIce.Fight()
130 
131                    {
132 
133                           Console.WriteLine("冰攻");
134 
135                    }
136 
137             }    
138 
139  (5)在main方法中实现如下函数
140 
141             static void Main(string[] args)
142 
143         {
144 
145             fashi f = new fashi3();
146 
147             while (true)
148 
149             {
150 
151                 f.Gongji();
152 
153                 Console.ReadKey();
154 
155             }
156 
157         }

 

 (6)在定义方法的时候,可以为变量赋初值,该值为默认值,如果不传参数就默认使用这个值,如果传参,使用传进来的参数替代这个值

 (7)微软推荐使用默认参数而非重载

posted @ 2012-10-03 15:04  Kencery  阅读(1484)  评论(0编辑  收藏  举报
友情链接:初心商城