C# 面向对象总结 (十二大特性)

 

  空间(namespace)-----类(class)-----对象(实例)-----对象.属性-----对象.方法

 

         使用类对象、属性、方法:

 

         static void Main(string[] args) { stu s1=new stu(); Console.Write("请输入考试成绩:"); s1.score=Convert.ToInt32(Console.ReadLine()); s1.add(); Console.Write("最终成绩:"); Console.WriteLine(s1.score); }

 

 

1、解决安全问题:访问修饰符

 

使用这些访问修饰符可指定下列五个可访问性级别: public:访问不受限制。 protected:访问仅限于包含类或从包含类派生的类型。 Internal:访问仅限于当前程序集。 protected internal:访问仅限于当前程序集或从包含类派生的类型。 private:访问仅限于包含类型。 本节还介绍以下内容: 可访问性级别:使用四个访问修饰符声明五个可访问性级别。 可访问域:指定在程序节的哪个位置可以引用成员。 可访问性级别的使用限制:概述了声明的可访问性级别的使用限制

2、解决赋值麻烦:构造函数     表现为:实例化时即赋初始值

 

           private Employee(string strQualification, string strName, char gender, uint empSalary) { _qualification = strQualification; _name = strName; _gender = gender; _salary = empSalary; } public static void Main(string[] args) { // 调用默认构造函数 Employee objGraduate = new Employee(); // 调用参数化构造函数 Employee objMBA = new Employee(“ACCPS3“, ”张亮影“, ‘男', 5500); Console.WriteLine(“默认构造函数输出: /n资格=“ + objGraduate._qualification); Console.WriteLine(“/n参数化构造函数输出: /n资格= " +objMBA._qualification); }         

       


3、解决方法名太多:方法重载     表现为:同方法名不同参(注意调用)

 

 

           … Class BillPayment { … void PayBill(int telephoneNumber) { //此方法用于支付固定电话话费 } void PayBill(long consumerNumber) { //此方法用于支付电费 } void PayBill(long consumerNumber, double amount) { //此方法用于支付移动电话话费 } … } …


4、解决同类名太多:命名空间      表现为:同类名不同空间(注意使用)

 

 

           … namespace Sony { class Television { ... } class WalkMan { ... } }           namespace Samsung { class Television { ... } class WalkMan { ... } }

           

                  Samsung.Television                                 Sony.Television

 

 

5、类的继承、多级继承

 

          //继承 Class person { } Class Student : person { } //多级继承 Class student : person { } Class gyccpstu : student { } //不允许多重继承 public class Graduate: Student, Employee { } //调用基类的构造函数 Class student : person { student(…) : base(…) { } }


6、调用基类的构造函数(如上)


7、方法重写

 

        using System; namespace cs4_方法重写 { class person { public virtual void test() { Console.WriteLine("人生往往有困难!"); } } class stu:person { public override void test() { Console.WriteLine("大学生的困难是面临各种考试!"); } } class Class1 { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main(string[] args) { // // TODO: 在此处添加代码以启动应用程序 stu s1=new stu(); s1.test(); person p1=new person(); p1.test(); person p2=s1; p2.test(); } } }


8、专门等待重写的类——抽象类与抽象方法

 

          using System; namespace cs4_方法重写 { abstract class person { public abstract void live(); public virtual void test() { Console.WriteLine("人生往往有考验!"); } public void play() { Console.WriteLine("我们有很多娱乐方式!"); } } class stu:person { public override void test() { Console.WriteLine("人生有很多很多的考验!"); } public override void live() { Console.WriteLine("学生要以学习为主!"); } } class gyccpstu:stu { public void leard() { Console.WriteLine("gyccp的学习一实践为主!"); } } class Class1 { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main(string[] args) { // // TODO: 在此处添加代码以启动应用程序 gyccpstu s1=new gyccpstu(); s1.leard(); s1.live(); s1.play(); s1.test(); } } }


9、等待重写的变态类——接口

 

       using System; namespace cs4_接口1 { /// <summary> /// Class1 的摘要说明。 public interface iperson { void test(); int live(); } class stu:iperson { public void test() { Console.WriteLine("考试对中国学生很重要!"); } public int live() { Console.WriteLine("生活对每一个人都很重要!"); return 10; } } class gyccpstu:stu { public void leand() { Console.WriteLine("我们要好好学习!"); } } class Class1 { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main(string[] args) { // // TODO: 在此处添加代码以启动应用程序 gyccpstu s1=new gyccpstu(); s1.leand(); Console.WriteLine(s1.live()); s1.test(); } } }


10、显式接口实现

 

       using System; namespace cs4_接口1 { /// <summary> /// Class1 的摘要说明。 public interface iperson { void live(); } public interface istu { void live(); } class gyccpstu:iperson,istu { public void play() { Console.WriteLine("在学习的同时也要记得去尽情的玩!"); } void iperson.live() { Console.WriteLine("生活对每一个人都很重要!"); } void istu.live() { Console.WriteLine("生活对wo 一个人很重要!"); } } class Class1 { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main(string[] args) { // // TODO: 在此处添加代码以启动应用程序 gyccpstu s1=new gyccpstu(); s1.play(); iperson p1=s1; p1.live(); istu p2=s1; p2.live(); } } }


11、继承多个接口与接口的继

 

               using System; namespace cs4_接口的接口 { /// <summary> /// Class1 的摘要说明。 public interface iperson { void live(); } public interface istu:iperson { int test(); } class gyccpstu:istu { public void leand() { Console.WriteLine("我们要好好学习!"); } public int test() { Console.WriteLine("考试对中国学生很重要!"); return 10; } public void live() { Console.WriteLine("生活对每一个人都很重要!"); } } class Class1 { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main(string[] args) { // // TODO: 在此处添加代码以启动应用程序 gyccpstu s1=new gyccpstu(); s1.leand(); Console.WriteLine(s1.test()); s1.live(); } } }

 

12. 属性:间接的控制成员字段(通过get和set)  主要达到安全方便的目的

 

               using System; namespace cs5_属性 { /// <summary> /// Class1 的摘要说明。 class worker { string name; int money; static int rate; public worker(string cname,int cmoney) { this.name=cname; this.money=cmoney; } public string cname { get { return name; } } public int cmoney { get { if(money<=0) { Console.WriteLine("数目不正确!"); } return money; } } public static int crate { get { return rate; } set { if(value<0) { Console.WriteLine("利率不能为负!"); return; } rate=value; } } } class Class1 { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main(string[] args) { // // TODO: 在此处添加代码以启动应用程序 worker w1=new worker("张三",3021); Console.WriteLine("职员的姓名是:"+w1.cname); Console.WriteLine("工资是:"+w1.cmoney); Console.WriteLine("请输入个人税率:"); worker.crate=int.Parse(Console.ReadLine()); Console.WriteLine("应缴个人所得税率:"+(w1.cmoney*worker.crate)/100); } } }


13. 索引器:通过 this关键词结合 属性 和 数组索引 的优点 来操作对象数组  

 

      using System; namespace cs5_数组索引 { /// <summary> /// Class1 的摘要说明。 /// </summary> class Class1 { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main(string[] args) { // // TODO: 在此处添加代码以启动应用程序 int[] num=new int[3]; num[0]=10; num[1]=30; num[2]=80; Console.WriteLine("数组中的第一个数为:"+num[0]); Console.WriteLine("数组中的第二个数为:"+num[1]); Console.WriteLine("数组中的第三个数为:"+num[2]); int count; Console.WriteLine("请输入班级人数:"); count=int.Parse(Console.ReadLine()); string[] stus=new string[count]; for(int i=0;i<count;i++ ) { Console.WriteLine("第{0}同学的姓名是:",i+1); stus[i]=Console.ReadLine(); } Console.WriteLine("本班同学录:"); foreach(string s in stus) { Console.WriteLine(s); } } } }


14. 委托:代理各种方法的执行(必须同参)

 

           using System; namespace cs5_委托 { public delegate int method(int a ,int b); class maths { public int add(int a,int b) { return a+b; } public int mul(int a,int b) { return a*b; } } class Class1 { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main(string[] args) { // // TODO: 在此处添加代码以启动应用程序 maths m1=new maths(); m1.add(2,3); method m2=new method(m1.add); Console.WriteLine(m2(1,2)); method m3=new method(m1.mul); Console.WriteLine(m3(3,8)); } } }


15. 事件:把多个类对象的多个方法,捆绑在一起响应执行

 

         using System; namespace person { class stu { string name; public delegate void reggate(); //定义委托 public event reggate regevent; //定义事件 public stu(string cname) // 构造函数 { this.name=cname; } public void stugo() // 引发事件的函数 { Console.WriteLine(name+"来学校报到了!"); regevent(); } } } namespace cs5_事件 { class Class1 { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main(string[] args) { // // TODO: 在此处添加代码以启动应用程序 person.stu s1=new person.stu("guangzi"); s1.regevent+=new person.stu.reggate(success); s1.stugo(); } public static void success() { Console.WriteLine("恭喜您!注册成功了!"); } } }

你可能感兴趣的:(C# 面向对象总结 (十二大特性))