C#基础系列第六篇
前言: 完全是我在学习过程中记录的笔记,只不过分享一下让很多刚开始学习.net编程的人能够很快的学会C#语言
- 接口
(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) 首先新建一个控制台应用程序,自己随便起个名字 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)微软推荐使用默认参数而非重载
初心商城:初心商城
作者:韩迎龙(Kencery) MVC/.NET群:159227188如果您认为这篇文章还不错或者有所收获,您可以通过右边的“打赏”功能 打赏一杯咖啡,本页版权归作者和博客园所有,欢迎转载,但未经作者同意必须保留此段声明, 且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利