C#成员访问和抽象类与接口2009-06-10 本站 L小凤一.成员访问和属性在定义类的时候我们要考虑成员的访问权限,在这里详细说明private加深大家对private的理解;如果类的成员是private那么在其他类中调用该类对象来访问它是非法的。下面举例说明:class Per{private string name;public string address;public int age;public Per(){name = "Upagn";address = "changsha";}}

在Main()函数中的代码如上图所示,在编译过程中会出现错误:错误“ceshi.Per.name”不可访问,因为它受保护级别限制有关属性set和get,set and get,它们的用途: 一般是对类里面的变量进行操作. 而不是直接对类的变量进行操作.有一个很大的作用就是: 便于维护.看下面的程序
 | 在实际程序中的变量调用get和set:Per percy = new Per();Console.WriteLine(percy.address);Console.WriteLine(percy.name);percy.age = 22; //调用set对age赋值Console.WriteLine(percy.age);//调用get获取当前对象age的值 |
二.有关抽象类和抽象方法的实现抽象类中只定义了一些成员和抽象的方法,当中成员不一定是抽象的,但是方法必须是抽象的,而且要在子类中覆盖来现实一定的功能;抽象类是不能实例化的。抽象方法也是,只定义了一个方法体,没有具体实现的代码,要在子类中覆盖,下表中左边是个抽象类和它的抽象方法,右边的类继承了它并实现了抽象方法
public abstract class Myab{public abstract void Hi(string Name);//抽象方法不可有主体。 } | public class SubMyab : Myab{ public override void Hi(string Name){Console.WriteLine(Name + "override void Hi(string Name"); }} |
类可以这样来初时化并使用: SubMyab obj = new SubMyab();obj.Hi(obj.city); 接口与抽象类的区别是接口中所有的成员都是抽象的,不能包含构造函数,析构函数和静态成员与常量。一个接口可以被多个类继承,一个类可以继承多个接口,并实现接口中的方法,下面定义一个接口,来求三个不同形状的面积:
public interface Ishape{double GetArea();//抽象方法只能写成这个样子}//三个类的实例对象求面积Retange Myre = new Retange(2, 8); Console.WriteLine(Myre.GetArea());Triangle MyTri = new Triangle(5, 1, 9);Console.WriteLine(MyTri.GetArea());Circle MyCur = new Circle(10);Console.WriteLine(MyCur.GetArea()); | public class Circle : Ishape{public double radius;public Circle(double radius){this.radius = radius; //构造函数}public double GetArea(){return (Math.PI) * this.radius * this.radius;}} |
public class Retange : Ishape{public double witdh;public double height;public Retange(double width, double height){this.witdh = width;this.height = height;//构造函数}public double GetArea(){return this.height * this.witdh;}}输出结果是: | public class Triangle : Ishape{public double Arc1;public double Arc2;public double Arc3;public Triangle(double Arc1,double Arc2,double Arc3){this.Arc1 = Arc1;this.Arc2 = Arc2;this.Arc3 = Arc3; //构造函数}public double GetArea(){return this.Arc1 * this.Arc2 * this.Arc3;}} |
上面的代码请大家认真分析并自己敲入电脑中实现,不要直接拷贝。下一节将讲述C#字符串处理。