面向对象(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.方法的重载。方法名相同,参数不同(类型,个数)。
    方法命名和记忆方便了。
    提高代码重用,减少重复。

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

class{
[public/private] 类名()

    
 }

}
特点:
1.对象实化例化时候被自动调用。
2.它是最早被执行的成员函数。 new 类名();实际上就是对构造函数的调用。
3.构造函数可以重载。
    如何调用同一个类中的其它的构造函数?
    public FeiXingQi(string name)                                             
        {
            Name = name;
        }
        public FeiXingQi(string name,int count,string type):this(name)   //this在这里是调用上面的public FeiXingQi(string name) 构造函数
        {
            _ChiBang = new ChiBang();
            _ChiBang._Type = type;
            _ChiBang._Count = count;
        }
this代表的当前的对象。this()调用当前对象的其它构造函数。this.xxxx调用当前对象的其它成员。
调用其它构造函数的this() ,不要写在构造函数的{}里面。写在构造函数的声明后面。

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

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

练习:

namespace ConsoleApplication28
{
    class Program
    {
        class Cat
        {
            private string Name;
            public string _Name
            {
                get { return Name; }
                set { Name = value; }
            }
            public Cat(string name)
            {
                Name = name;
            }
            public void Cry()
            {
                Console.WriteLine(Name+":喵呜");
            }
        }
        class Mouse
        {
            public void Runaway()
            {
                Console.WriteLine("猫来了,快撤");
            }
        }
        class Humen
        {
            private string Name;

            public string _Name
            {
                get { return Name; }
                set { Name = value; }
            }

          
            public void Awake()
            {
                Console.WriteLine(Name+":笨猫,别叫了");
            }
        }
        class House
        {
            private Cat _Cat;
            private Mouse _Mouse;
            private Humen _XiaoXing=new Humen();
            public House(string Catname,string Humenname)
            {
                _Mouse = new Mouse();
                _Cat = new Cat(Catname);
                _XiaoXing._Name = Humenname;            
            }     
            public void Start()
            {
                _Cat.Cry();
                _Mouse.Runaway();
                _XiaoXing.Awake();
            }
        }
        static void Main(string[] args)
        {
            House h = new House("黑猫警长","王五");
            h.Start();
            Console.ReadLine();
        }
    }
}



五、静态成员。

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


******调用实例成员:对象名.实例成员名
******调用静态成员:类、名.静态成员名

******注意:静态方法中只能调用静态的成员。实例方法可以调用实例成员也可以调用静态成员。

posted @ 2015-04-28 17:02  指尖的人生  阅读(144)  评论(0编辑  收藏  举报