C#基础入门第九天(面向对象1)

1、面向对象的概念
1.面向过程(C)-----》面向对象
面向过程:面向的是完成这件事的过程,强调的是完成这件事的动做。
如:将东西放进冰箱
一、打开冰箱门
二、把东西放进去
三、关闭冰箱门
如上都是强调的动做ide

如:张三长的矮小,力气也小
打开冰箱门,因为矮小够不这,须要垫个凳子
力气小抬不动东西,须要找人帮忙
关闭冰箱门,依然须要垫个凳子函数

李四长的高,力气很是大
         本身就能打开冰箱门
         本身就能抬动
         关闭冰箱门也不须要凳子

若是用面向过程的思想来解决事,当执行这件事的人不一样时,这样就须要为每一个不一样的人量身定作解决事情的方法。工具

面向对象:没有统一的理解,找个对象来作这个事情
如:把东西放进冰箱里
由于干的事情里,每件都有冰箱,这样就能够以冰箱做为对象
1.冰箱门能够被打开
2.东西能放进冰箱里
3.冰箱门能够被关闭this

张三:调用1 调用2 调用3
李四:调用2 调用2 调用3code

面向对象:意在写出一个通用的代码,屏蔽差别对象

关门
面向过程:关门
张三:一脚把门踹紧了
李四:轻轻的把门带上了
王五:门没关严内存

面向对象:关门
门能够被关闭资源

我在黑板上画了一个圆、方块、菱形
将 圆做为对象 圆能够被画在黑板上
将 方块做为对象 方块能够被画在黑板上
将 菱形做为对象 菱形能够被画在黑板上get

将 黑板做为对象 黑板上能够被画:圆、方块、菱形
找对象时,通常找的是被动的一方string

咱们在代码中描述一个对象,经过描述这个对象的属性和方法。
对象没必要须是看得见摸得着的

灯:属性和方法
属性:值
外形:长的
亮度:500W
颜色:白色
牌子:XX
发信:发光

电风扇:属性,方法
属性:三个扇叶
颜色:白色
品牌:XX
方法:转动,扇风

咱们把具备相同属性和相同方法的对象进行进一步的封装,抽象出来,类这个概念。
类就是个模子,肯定对象应该具备的属性和方法
对象时根据类建立出来的。
类至关于一个盖大楼的图纸,对象就是盖出来的大楼

2、面向对象的代码
类:
语法
public class 类名
{
字段:
属性:
方法:
}
写好类以后,咱们须要建立这个类的对象,
name,建立这个类的对象的过程称之为:实例化
使用关键字:new
this:表示当前这个类的对象
类是不占内存的,而对象时占内存的

public class Person
{
    public string _name;
    public int _age;
    public char _gender;

    public void CHLSS()
    {
        Console.WriteLine("我叫{0},我今年{1}岁,我是{2}的,我能够吃喝拉撒睡~~~", this._name,this._age,this._gender);
    }
}

调用类

static void Main(string[] args)
    {
        //建立person类的对象
        Person zhangSan = new Person();
        zhangSan._name = "张三";
        zhangSan._age = 21;
        zhangSan._gender = '男';
        zhangSan.CHLSS();
        Console.ReadKey();
    }

属性:保护字段,对字段的赋值进行赋值和取值进行限定
属性的本质就是两个方法,get()和set()
当给属性赋值的时候,首先执行set方法
当输出属性值得时候,会执行get方法
字段就是女人 属性才是真男人
字段在类中,必须是私有的。要对字段进行操做必须经过属性。
属性的代码
既有get又有set:可读可写属性
只有get:只读属性
只有set:只写属性

访问修饰符
public:公开的公共的,在哪都能访问
pribate:私有的,只能在当前类的内部进行访问,出了这个类就访问不到

public class Person
{
    private string _name;
    public string Name
    {
        //当输出属性值得时候,会执行get方法
        get { return _name; }
        //当给属性赋值的时候,首先执行set方法
        set { _name = value; }
    }
    private int _age;
    public int Age
    {
        get { return _age; }
        set {
            if (value < 0 || value > 100)
            {
                value = 0;
            }
            _age = value; }
    }
    private char _gender;
    public char Gender
    {
        get {
            if (_gender != '男' && _gender != '女')
            {
                return _gender = '男';
            }
            return _gender; }
        set { _gender = value; }
    }
    public void CHLSS()
    {
        Console.WriteLine("我叫{0},我今年{1}岁,我是{2}的,我能够吃喝拉撒睡~~~", this.Name,this.Age,this.Gender);
    }
}

属性调用

class Program
{
    static void Main(string[] args)
    {
        //建立person类的对象
        Person zhangSan = new Person();
        zhangSan.Name = "张三";
        zhangSan.Age = 21;
        zhangSan.Gender = '男';
        zhangSan.CHLSS();
        Console.ReadKey();
    }
}

3、静态和非静态的区别(static)
一、在非静态类中,既能够有实例成员,也能够有静态成员。
二、在调用实例成员的时候,须要使用对象名.实例成员
在调用静态成员的时候,须要使用类名.静态成员
总结:静态成员必须使用类名去调用,而实例成员使用对象名调用
静态函数中,只能访问静态成员,不容许访问实例成员
实例函数中,既可使用静态成员,也可使用实例成员
静态类中只容许有静态成员,不能有实例成员
使用范围
一、若是你想要你的类当作一个“工具类”去使用,这时候能够考虑写成静态类。(常用的类)
二、静态类在整个项目中资源共享
只有在程序所有结束后,静态类才会释放资源
释放资源:释放内存 C#中有垃圾回收器GC

4、构造函数
做用:帮助咱们初始化对象(给对象的每一个属性依次的赋值)
构造函数是一个特殊的方法
一、构造函数没有返回值,连void也不能写
二、构造函数名必须跟类名同样
三、构造函数必须是public
建立对象的时候会执行构造函数
构造函数能够有重载

类当中会有一个默认的无参数的构造函数,当你写一个新的构造函数以后,不论是不是无参数的,那个默认的五参数的构造函数都会被干掉

关键字:new
new帮助咱们作了三件事
一、在内存中开辟一块空间
二、在开辟的空间中建立对象
三、调用对象的构造函数进行初始化对象

关键字:this
一、表明当前类的对象
二、在类当中显示的调用本类的构造函数

5、析构函数
当程序结束的时候,析构函数才会执行
做用:帮助咱们释放资源
GC有时候不会立刻释放资源,这时候使用析构函数来立刻释放资源。

最后的总结练习

class Ticket
{
    /*写一个Ticket类,有一个举例属性(本属性只读,在构造方法中赋值,不能为负数)
      有一个价格属性,价格属性只读,而且根据举例distance计算价格Price(1元/千米)
     0-100千米     不打折
     101-200千米   打9.5折
     201-300千米   打9折
     300千米以上   打8折
     有一个方法,能够显示这张票的信息,90千米90块钱 
     */
    private double _distance;
    public double Distance
    {
        get { return _distance; }
    }
    public Ticket(double distance)
    {
        if (_distance < 0)
        {
            _distance = 0;
        }
        this._distance = distance;
    }

    private double _price;
    public double Price
    {
        get {
            if (_distance > 0 && _distance <= 100)
            {
                return _distance * 1.0;
            }
            else if (_distance > 100 && _distance <= 200)
            {
                return _distance * 0.95;
            }
            else if (_distance > 200 && _distance <= 300)
            {
                return _distance * 0.9;
            }
            else
            {
                return _distance * 0.8;
            }
 }

    }
    public void Show()
    {
        Console.WriteLine("{0}千米{1}元钱", _distance, Price);
    }
}

    调用
    static void Main(string[] args)
    {
        Ticket t = new Ticket(150);
        t.Show();
        Console.ReadKey();
    }
}
相关文章
相关标签/搜索