类作为面向对象的灵魂,在C#中有着相当广泛和深入的应用,对类的深度掌握自然是我们学习C#重要的一个环节.有关类的意义上一篇 C#学习日记12---引用类型 中已经给出了,这里就不再重复了.说到 类 就不得不说下与之息息相关的内容----对象.
类与对象:
类: 从具有相同属性的事物当中抽象出来的概念,一般用来描述同类个体的集合。
对象: 从类当中具体化的一个个体。(比如人类就是一个类, 张三 就是人类中的一个对象)
属性:用来描述对象特征的。 (在类里面,是类的数据成员^_^)
方法: 说明对象具有的能力。 (在类里面,是类的数据成员^_^,在C/C++中它叫函数,以后要改口啦)
事件: 具有触发能力的函数.
(与方法不同的是,事件是被动,由外部事物发出,受动者是对象; 而方法是由对象主动发出的动作,是类的数据成员)
类的定义:
类的定义是以关键字 class 开始,后跟类的名称。类的主体,包含在一对花括号内。
访问修饰符 class 类名 { 访问修饰符数据成员; }
举个例子:
public class Student { private string name; private int age; }
访问类里面的数据成员方式与 Struct类型 一样,您要使用(.)点运算符(链接了对象的名称和成员的名称),对于访问修饰符,这里对 private、public、internal 稍微说一下(以后我会细说哒):
private: 私有访问。只限于本类成员访问,子类,实例(对象)都不能访问 (换句话说供类自身调用)。
public: 公有访问。不受任何限制,所有类都可访问。
internal: 同一个程序集中的所有类均可访问,可以想象成Public 的其中一个程序集集合。
如果没有指定访问修饰符,相关的访问权限就会使用默认权限,类的默认权限是 internal, 成员的默认权限是private; 所以当我们以后出现了有关访问权限问题的时候,记得看看是不是没指定访问修饰符或者使用不适当。
创建对象:
也可以说是对类进行对象实例化,需要采用 new 语句。拿上面定义好的类举例子 Student stu = new Student(); 此时会调用Student类当中的 构造方法(函数,通俗的理解为初始化函数吧,以后在说构造函数与析构函数),如果没有默认将数据成员赋值为0;
下面就写个列子:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test { //定义的一个类,类名叫People public class People { //全部指定为公有成员 public string name; public char sex; public uint age; } class Program { static void Main(string[] args) { People person = new People(); //实例化一个类,对象名叫 person Console.WriteLine("输入姓名: "); person.name = Console.ReadLine(); // 全部轻松访问,没有压力 Console.WriteLine("请输入性别:"); person.sex = Console.ReadKey().KeyChar; //char 类型转换 Console.WriteLine("\n请输入年龄:"); person.age = uint.Parse(Console.ReadLine()); //强制类型转换 Console.WriteLine("您的姓名是:{0}\t您的性别是:{1}\t您的年龄是:{2}",person.name,person.sex,person.age); } } }
运行下:
看完上面写的代码,发现 这与 Struct类型 除了名字不同外有何区别?? 在上面的程序中确实没有区别(所有成员都是Public),看下面这个:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test { //定义的一个类,类名叫People public class People { //全部指定私有成员 private string name; private char sex; private uint age; //定义public 方法作用是输入与输出 public void input() { Console.WriteLine("输入姓名: "); name = Console.ReadLine(); Console.WriteLine("请输入性别:"); sex = Console.ReadKey().KeyChar; //char 类型转换 Console.WriteLine("\n请输入年龄:"); age = uint.Parse(Console.ReadLine()); //强制类型转换 } public void output() { Console.WriteLine("您的姓名是:{0}\t您的性别是:{1}\t您的年龄是:{2}",name, sex,age); } } class Program { static void Main(string[] args) { People person = new People(); //实例化一个类,对象名叫 person person.input(); //通过调用 public 方法访问privat 成员并赋值 person.output(); //此时无法使用直接使用 Console.WriteLine(person.name)输出,访问权限不够 } } }
运行过于上面一模一样,在class类中我们可以定义方法,(上面的input与output是两个方法)而在Struct 结构体中不能定义方法,而且我们将People类中的属性指定为private 私有成员,外界对象person无法直接访问,只能通过People中指定的Public方法访问。举个例子吧: 当我俩打电话的时候,我俩并没有面对面的交流,而是通过 手机 这个媒介相互交换信息,此时 手机就可以看作你的一个public方法,你就是一个类中私有成员,我就是这个类实例化的一个对象。
以上就是C#学习日记13---类(Class)的声明与定义的内容,更多相关内容请关注PHP中文网(www.php.cn)!