面向对象总结

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

 

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

          view plaincopy to clipboardprint?
 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)    
 }  
 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、解决安全问题:访问修饰符 

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

          public:访问不受限制。

          protected:访问仅限于包含类或从包含类派生的类型。

          internal:访问仅限于当前程序集。

          protected internal:访问仅限于当前程序集或从包含类派生的类型。

          private:访问仅限于包含类型。

       本节还介绍以下内容: 

           可访问性级别:使用四个访问修饰符声明五个可访问性级别。

           可访问域:指定在程序节的哪个位置可以引用成员。

           可访问性级别的使用限制:概述了声明的可访问性级别的使用限制

 

 

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

            view plaincopy to clipboardprint?
 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)    
 }  
 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、解决方法名太多:方法重载     表现为:同方法名不同参(注意调用) 

            view plaincopy to clipboardprint?
 …   
 class billpayment   
 {   
     …   
     void paybill(int telephonenumber)   
     {   
         //此方法用于支付固定电话话费   
     }   
     void paybill(long consumernumber)   
     {   
         //此方法用于支付电费   
     }   
     void paybill(long consumernumber  double amount)   
     {   
         //此方法用于支付移动电话话费   
     }   
     …   
 }   
 …  
 …
 class billpayment
 {
  …
  void paybill(int telephonenumber)
  {
   //此方法用于支付固定电话话费
  }
  void paybill(long consumernumber)
  {
   //此方法用于支付电费
  }
  void paybill(long consumernumber  double amount)
  {
   //此方法用于支付移动电话话费
  }
  …
 }
 … 

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

            view plaincopy to clipboardprint?
 …   
 namespace sony   
 {   
   class television   
   {   
        ...   
   }   
   class walkman   
   {   
        ...   
   }   
 }  
 …
 namespace sony
 {
   class television
   {
        ...
   }
   class walkman
   {
        ...
   }
 }           view plaincopy to clipboardprint?
 namespace samsung   
 {   
   class television   
   {   
        ...   
   }   
   class walkman   
   {   
        ...   
   }   
 }  
 namespace samsung
 {
   class television
   {
        ...
   }
   class walkman
   {
        ...
   }
 } 

 

                   samsung.television                                 sony.television

 5、类的继承、多级继承

           view plaincopy to clipboardprint?
 //继承   
 class person   
 {   
 }   
 class student : person   
 {   
 }   
   
 //多级继承   
 class student : person   
 {   
 }   
 class gyccpstu : student   
 {   
 }   
   
 //不允许多重继承   
 public class graduate: student  employee   
 {   
 }    
   
 //调用基类的构造函数   
 class student : person   
 {   
     student(…) : base(…)   
     {   
     }   
 }  
 //继承
 class person
 {
 }
 class student : person
 {
 }

 //多级继承
 class student : person
 {
 }
 class gyccpstu : student
 {
 }

 //不允许多重继承
 public class graduate: student  employee
 {
 } 

 //调用基类的构造函数
 class student : person
 {
  student(…) : base(…)
  {
  }
 } 

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

 
 7、方法重写

         view plaincopy to clipboardprint?
 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()    
         }   
     }   
 }  
 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、专门等待重写的类——抽象类与抽象方法

           view plaincopy to clipboardprint?
 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()    
         }   
     }   
 }  
 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、等待重写的变态类——接口

        view plaincopy to clipboardprint?
 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()    
         }   
     }   
 }  
 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、显式接口实现

        view plaincopy to clipboardprint?
 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()    
         }   
     }   
 }  
 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、继承多个接口与接口的继承

                view plaincopy to clipboardprint?
 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()    
         }   
     }   
 }  
 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)  主要达到安全方便的目的

                view plaincopy to clipboardprint?
 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.cmoneyworker.crate)/100)    
         }   
     }   
 }  
 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.cmoneyworker.crate)/100) 
   }
  }
 }

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

       view plaincopy to clipboardprint?
 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)    
             }   
   
         }   
     }   
 }  
 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. 委托:代理各种方法的执行(必须同参)

            view plaincopy to clipboardprint?
 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 ab    
         }   
     }   
     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))    
                
         }   
     }   
 }  
 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 ab 
   }
  }
  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. 事件:把多个类对象的多个方法,捆绑在一起响应执行

          view plaincopy to clipboardprint?
 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(" 恭喜您!注册成功了!" )    
         }   
     }   
 }  

posted @ 2010-10-28 23:36  Kingdom_0  阅读(174)  评论(0编辑  收藏  举报