结构、类和接口----C#
1、结构
语法:
结构修饰符 struct 结构名 { }
结构的特点:
- 结构是值的类型
- 向方法传递结构时,结构是通过传值方式传递的,而不是作为引用传递的。
- 结构的实例化可以不使用new运算符。
- 结构可以声明构造函数,但它们必须带参数。
- 一个结构不能从另一个结构或类继承,所有结构都直接继承自System.ValueType,后者继承自System.Object。
- 结构可以实现接口。
- 在结构中初始化实例字段是错误的。
2、类
类描述案例一系列在概念上有相同含义的对象,并为这些对象统一定义了编程语言上的属性和方法。
语法:
类修饰符 class 类名 { }
类修饰符:
- new:仅允许在嵌套类声明时使用,表面类中隐藏了由基类中继承而来的、与基类中同名的成员。
- public:不限制对该类的访问。
- protected:可访问域限定于类内或从该类派生的类内
- internal:只有其所在类才能访问。
- private:只有.NET中的应用程序或库才能访问。
- abstract:抽象类,不允许建立类的实例。
- sealed:密封类,不允许被继承。
C#中,类只支持单继承,不支持多重继承,即一次只允许继承一个类,不能同时继承多个类。
当对一个应用sealed修饰符时,该修饰符会阻止其他类从该类继承。
3、接口
接口是一种用来定义程序的协议,它描述可属于任何类或结构的一组相关行为。接口可由方法、属性、事件和索引器或这4种成员类型的任何组合构成,但不能包含字段。
语法:
[修饰符] interface 接口名称[:继承的接口列表] { 接口内容; }
接口特征:
- 接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。
- 不能直接实例化接口。
- 接口可以包含事件、索引器、方法和属性。
- 接口不包含方法的实现。
- 类和结构可从多个接口继承。
- 接口自身可从多个接口继承。
接口可以声明一个带有get访问器的属性,而实现该接口的类可以声明同时带有get和set访问器的同一属性。
4、实例------一个控制台程序
声明3个接口IPeople,ITeacher和IStudent,其中ITeacher和IStudent继承自IPeople,然后Program类继承这3个接口,并分别实现这3个接口中的属性和方法。
代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Interface_Test { interface IPeople //People接口 { string Name //姓名 { get; set; } string Sex //性别 { get; set; } } interface ITeacher : IPeople //教师接口(继承自People接口) { void teach(); //教学方法 } interface IStudent : IPeople //学生接口(继承自People接口) { void study(); //学习方法 } class Program:IPeople,ITeacher,IStudent //多接口继承 { string name=""; string sex=""; public string Name //姓名 { get { return name; } set { name=value; } } public string Sex //性别 { get { return sex; } set { sex=value; } } public void teach() //教学方法 { Console.WriteLine(Name+" "+Sex+" "+"教师"); } public void study() //学习方法 { Console.WriteLine(Name + " " + Sex + " " + "学生"); } static void Main(string[] args) { Program myprogram=new Program(); //实例化对象 ITeacher teacher=myprogram; //使用派生类对象实例化接口ITeacher teacher.Name="TOM"; teacher.Sex="男"; teacher.teach(); IStudent student = myprogram; //使用派生类对象实例化接口IStudent student.Name="小明"; student.Sex="男"; student.study(); Console.ReadLine(); } } }
运行结果: