zoukankan      html  css  js  c++  java
  • 面向对象----类2

    一、类的概念:

    1.我们根据实际情况,自己定义的一个复杂的类型。

    2.类的三大特性:封装、继承、多态。

    3.类的定义:关键字是class

    [public/private] class 类名

    {  成员变量的定义;(字段的定义)  

    [public/private] 变量类型 变量名;

     属性的定义;  public 属性类型 属性名  {   get{}   set{}  }  成员函数的定义;(方法的定义)  [public/private] 返回类型 函数名(形参列表)  {  } }

    4.类的使用: 类的实例化 - 生成对象。

    类名 引用名 = new 类名();

    调用对象的成员: 引用名.成员变量名 引用名.属性名 引用名.成员方法名()

    二、访问修饰: public  - 类的花括号里面和外面都可以访问。 private - 类的花括号里面可以访问。

    三、属性的定义与使用。

    作用:用来给私有的成员变量进行安全的赋值和取值的功能。

    定义: public 属性类型 属性名 {  get  //读取部份。  {   return 成员变量名.  }  set  //设置部份  {   成员变量名 = value;   } } public int Height {  get  {   return _Height;  }  set  {   if(value>0 && value<300)   {    _Height = value;   }   else   {    Console.WriteLine("Error");   }  } }

    三、方法的使用:

    1.方法的定义就是函数的定义。如果是 private修饰的方法是外界不能调用,我们通常称之为工具函数。

    2.方法的重载。方法名相同,参数不同(类型,个数)。  方法命名和记忆方便了。  提高代码重用,减少重复。

    四、构造函数。 对象在实例化的时候自动被调用的函数。无法使用代码显式调用当前对象的构造函数。

    定义: [public/private] 类名() {   }

    特点: 1.对象实化例化时候被自动调用。

    2.它是最早被执行的成员函数。 new 类名();实际上就是对构造函数的调用。

    3.构造函数可以重载。  

    如何调用同一个类中的其它的构造函数?

     public FeiXingQi(string name)         {             Name = name;         }         public FeiXingQi(string name,int count,string type):this(name)         {             _ChiBang = new ChiBang();             _ChiBang._Type = type;             _ChiBang._Count = count;         } this代表的当前的对象。this()调用当前对象的其它构造函数。this.xxxx调用当前对象的其它成员。 调用其它构造函数的this() ,不要写在构造函数的{}里面。写在构造函数的声明后面。

    **************************************

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;

    namespace ConsoleApplication1

    {

        class ChiBang     {         public string _Type;         public int _Count;     }    

    class FeiXingQi     {         public string _Name;         public ChiBang _Chibang;        

    public FeiXingQi(string name,string type,int count)         {             _Name = name;             _Chibang = new ChiBang();             _Chibang._Type = type;             _Chibang._Count=count;         }     }    

    class Program     {         static void Main(string[] args)         {             FeiXingQi f = new FeiXingQi("鹰隼","铝合金",2);             Console.ReadLine();         }     } }

    **************************************

    4.如果不显示声明构造函数,系统会自动加一个默认的构造函数。一旦显式声明构造函数了,系统将不会再自动生成默认构造函数。

    使用场境: 通用在构造函数中用来对对象进行一些初始化的工作(给成员变量赋初始值)。

    五、静态成员。

    静态成员属于类的。不管我造多少个对象,静态成员在内存中永远只是一个区域。 实例成员属于对象的。每个对象都会有对应实例成员的存储区域。

    ******调用实例成员:对象名.实例成员名

    ******调用静态成员:类、名.静态成员名

    ******注意:静态方法中只能调用静态的成员。

    实例方法可以调用实例成员也可以调用静态成员。

    ****************************************************

    //构造函数---小例子

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;

    namespace ConsoleApplication1 {   

      class Cat     {         private string _Name;

            public string Name//封装,属性名         {             get { return _Name; }             set { _Name = value; }         }         public Cat(string name)//带参数的构造函数,函数名与类名相同         {             Name=name;         }         public void Jiao()         {             Console.WriteLine(Name + ":喵喵喵喵喵喵喵喵,小猫我叫了好几声!");         }     }   

      class Mouse     {         private string _Name;

            public string Name//封装,属性名         {             get { return _Name; }             set { _Name = value; }         }         public void Pao()         {             Console.WriteLine(Name+":老猫发疯了,要赶尽杀绝,鼠子鼠孙们快跑呀!");         }

        }    

    class Man     {         private string _Name;

            public string Name//封装,属性名         {             get { return _Name; }             set { _Name = value; }         }         public void Wake()         {             Console.WriteLine(Name+":真不该养猫呀,吵得人都不能睡觉了!");         }

        }    

    class House     {         private  Cat mao;         //对于拥有一个带参数的构造函数的类只能先声明一个变量,但不能随意指定一个对象,         //必须在指定对象时赋上相应的参数         private Mouse shu = new Mouse();         private Man ren = new Man();         public House(string maoname, string shuname, string renname)             //带参数的构造函数,函数名与类名相同         {             mao=new Cat( maoname);             shu.Name = shuname;             ren.Name = renname;         }         public void Kai()         {             mao.Jiao();             shu.Pao();             ren.Wake();         }     }    

    class Program     {         static void Main(string[] args)         {             House h = new House("Tom","Jeny","Wen");             //对于拥有带参数的构造函数的类要声明时,必须在声明的对象上赋值相应的参数             h.Kai();             Console.ReadLine();         }     } }

    ****************************************************

  • 相关阅读:
    常见字符编码扫盲(UTF,Unicode, GB2312) 四
    Ogre 实用技巧 四
    CEGUI中文显示问题的解决方法 四
    大幅革新 AMD下一代图形产品前瞻 四
    力争上游 ——我眼中的“计算机产业链” 四
    养成 SQL SERVER 的好习惯 四
    说说 Windows 中的中文字体 四
    Unicode字符集和多字节字符集关系 四
    各种电影 四
    [projectEuler.net]12
  • 原文地址:https://www.cnblogs.com/xianshui/p/4466984.html
Copyright © 2011-2022 走看看