C# Calculator类
在C# 2.0中,除了可以对整个属性设置public等访问修饰符外,对内部的get/set访问器同样可以设置访问修饰符,当然它要受到一定的限制。由于有些限制和接口、重写有关,我暂时不会介绍,在这里,我仅介绍访问器和属性的访问修饰符冲突问题。
1、如果整个属性被设置为public,则其访问器没有限制;
2、如果整个属性被设置为protected internal,则访问器的访问修饰仅能设置为internal,protected或者private中的一种;
3、如果整个属性被设置为internal或者protected,那么访问器的访问修饰只能是private。
如下例:
- publicClassA
- {
- privatestringm_text;
- privateintm_count;
- publicstringText
- {
- get{returnm_text;}
- protectedset{m_text=value;}
- }
- internalintCount
- {
- privateget{return5;}
- privateset{m_count=value}
- }
- }
从程序的实质来看,其实属性就是一种特殊的方法,它等同于下面的代码:
- public int GetAge()
- {
- return m_age;
- }
- public void SetAge(int age)
- {
- m_age = age;
- }
从这个意义上来理解get/set访问器的访问级别修饰,就更容易理解了。实质上,所谓的访问器的访问级别修饰,不外乎就是对方法进行访问级别修饰罢了。当然,C#中提供的属性要比访问字段的get/set方法更加简便。一般而言,如要定义方法,应该是和一个对象的行为有关,例如系列三定义的User类中的SignIn()和SignOut()方法,它们代表的是对象User的行为:登录和退出。
定义一个类的方法,必须包括五个要素:方法修饰符,方法名,返回类型,参数,以及方法体,例如Add方法:
- public int Add(int x, int y)
- {
- return x + y;
- }
public即为我们的方法修饰符,它代表了该方法能被访问的级别。当然,修饰的方法的关键字还包括 static,virtual,abstract等,不过这些内容会在以后介绍。方法名自然是Add了,自然属于方法的名字。返回类型为int,代表该方法会返回一个结果,该结果类型为int类型。参数有两个,分别为x和y,它们的类型都是int。调用者可以通过参数传递值到方法体中,并对它们进行操作。方法体则是花括号中的内容。
假设Add方法是定义在类Calculator中,那么该方法的调用为:
- Calculator cal = new Calculator();
- int result = cal.Add(3,5);
通过对Add的调用,并传入3和5的参数,***得到结果8,并返回。因此,此时变量result的值就为8。而***行代码,则是利用new关键字对C# Calculator类进行实例化,获得一个对象cal。通过对象cal,才可以调用C# Calculator类的公共方法、属性或字段。
为什么要进行实例化呢?我们定义一个类类型,是为调用者所使用的,否则就失去其意义了。但我们定义的这样一个类类型,仅仅是代表了某种格式而已,例如User类说明它是一个class,它拥有了一些字段、属性和方法。通过这样的定义,我们在使用这些类型的对象时,.Net能够识别它。而如果真正要调用这些类型对象,就必须进行”实例化”,这个操作就会在运行期间,创建一个个对象,并被放在内存空间中供程序调用。就好比”人”就是一个类类型,而某一个具体的人,才是被实例化的、真正存在的对象。要使得一个类类型被实例化,就需要为该类型提供”构造器”。构造器是一种特殊的方法,它没有返回类型,且其方法名和类型名保持一致,如C# Calculator类的定义以及它的构造器:
- public class Calculator
- {
- public Calculator()
- {
- }
- public int Add(int x, int y)
- {
- return x + y;
- }
- }
Calculator()方法就是一个”构造器”,这个构造器并没有参数,在C#中,也被称为默认的构造器,即使不定义该构造器,.Net也会为它默认创建。例如在Calculator类中,我们完全可以删去Calculator()构造器的定义。然而,一旦我们定义了有参数的构造器时,则该默认构造器将不存在,如果我们再需要不带参数创建实例的话,就需要显式创建该构造器了。例如之前的User类。如果姓名和密码是该类一个非常重要的属性,大部分情况下,如果要创建User对象时,都需要这两个属性的值时,我们就可以为User类专门创建一个构造器:
- public class User
- {
- public User(string name, string password)
- {
- m_name = name;
- m_password = password;
- }
- }
【编辑推荐】