C#面向对象基础

面向对象基础

1.面向对象的概念

概念

面向对象是指将所有需要处理的现实问题抽象为类,并通过类的实例(对象)去处理它。例如:面向对象其实就是给了我们一扇门,我们每个人关门的动作不一样,但是,在面向对象中,我们不需要去了解怎样去关门,我们只需要知道门会关闭就行了。

2.类的基本操作

  •  在面向对象中,一般用类来描述某种事物的特征,用类的实例(称为对象)来创建具体的实体。例如,一个单位员工就是类,而单位中的张三,李四都是员工的对象。
  • 类是封装数据的基本单位。一般用类来定义对象具有的特征(字段、属性等)和可执行的操作(方法、事件等)。
  • 方法、属性和事件是构成类的主要成员。 

语法: 

[访问修饰符] class 类名
{
    类成员;
}
类的成员:常量、字段、属性、索引、方法、事件、运算符、构造函数、析构函数和嵌套类。

例如:
public class Person
{
    //字段
    public string _name;
    public int _age;
    public char _gender;
    //方法
    public static void CHLSS()
    {
        Console.WriteLine("吃喝拉撒睡");
    }
}

访问修饰符: 

  1. public:公开的,所有人都可以访问。
  2. private:私密的,只能在当前类的内部进行访问,除了这个类就访问不到了。

引用:在main函数中书写

语法:类名 对象名 = new 类名()

例如:
Person SunQuan = new Person();
SunQuan._name = "孙权";
SunQuan._age = 23;
SunQuan._gender = '男';
SunQuan.CHLSS();

注意:类是不占内存的,而对象是占内存的。 

 3.属性

属性的作用

保护字段,对字段的赋值和取值进行限定。

属性的本质

就是通过两个方法对字段进行限制和保护,一个是get(),另一个是set().

public class Person
{
    string _name;//定义个私有的字段,外部不能对_name直接进行读写,但可以通过其属性进行。   
    public string Name //数据类型必须和相应字段相同
    {
        //当输出属性的值的时候,会执行get()方法
        get { return _name;}
        //当给属性赋值的时候,首先会执行set()方法
        set { _name = value;}
    }

    int _age;
    public int Age
    {
        get { return _age;}
        set { _age = value;}
    }

对字段进行限制: 

public class Person
{
    char _gender;
    public string Gender
    {
        //对输出的数据进行判断
        get { 
            if(_gender != '男' && _gender != '女')
            {
                return _gender = '男';
            }            
            return _gender;}
        set { _gender = value;}
    }

    int _age;
    public int Age
    {
        get { return _age;}
        //对输入的数据进行判断
        set { 
            if(value < 1 && value > 100)
            {
                value = 0;
            }
            _age = value;}
    }

注意:get() 和 set()两个方法写其一就行,本代码只是为了展示其用法。 当封装数据时,可能希望配置一个只读属性。为此,可以忽略set块;类似,如果想拥有一个只读属性,就忽略get块。

4.静态和不静态的区别

概念

拥有static的就是静态的,没有static就是不静态的。

非静态的

1.在非静态类中,既可以有实例成员(非静态的),也可以有静态成员。

2.在非静态函数中,既可以使用静态成员,也可以使用实例成员。

3.在调用实例成员时,需要使用:对象名.实例成员。

4.在调用静态成员时,需要使用:类名.静态成员。

静态的

1.静态类中只允许有静态成员,不允许出现实例成员。

2.静态方法中,只能访问静态成员,不允许访问实例成员。

注意:静态成员必须使用类名去调用,而实例成员使用对象名调用。 

在什么情况下去使用静态还是非静态

1.如果你想要你的类当成一个“工具类”去使用,这个时候可以考虑将类写成静态的。

2.静态类在整个项目中资源共享。 

注意:只有在程序全部结束之后,静态类才会被释放。 

5.构造函数

用途

构造方法用来创建对象,并且可以在构造函数中对对象进行初始化。

注意

1.构造函数没有返回值,连void也不能写,语法:public 类名{}。

2.构造函数的名称必须和类名一样。

3.构造函数是可以重载的。

4.构造函数可以有参数的,new对象的时候传递方法参数即可。

5.如果不指定构造函数,则类中有一个默认的无参构造函数。

6.如果指定了构造函数,则不再有默认的无参构造函数,如果需要无参构造函数,则需要自己来写。

public class PhoneNumberInfo
{
        //构造函数
        public PhoneNumberInfo(long phone,long password)
        {
            this._phone = phone;
            this._password = password;
        }
        long _phone;//电话号码
        long _password;//密码
}

 6.this关键字

this的两个作用

1.代表当前类的对象。

2.在类中显示调用本类的构造函数。

 例如:

public class PhoneNumberInfo
    {
        public PhoneNumberInfo(long phone,long password)
        {
            this._phone = phone;
            this._password = password;
        }

        //this的第二种用法:利用构造函数重载,来调用上一个构造函数。
        public PhoneNumberInfo(long phone):this(phone,所输入的密码)
        {

        }

        long _phone;//电话号码
        long _password;//密码
        double _yue;//余额
        public double Yue
        {
            get { return _yue; }
            set { _yue = value; }
        }
        double _liuliang;//流量
        public double LiuLiang
        {
            get { return _liuliang; }
            set { _liuliang = value; }
        }
        double _hour;//通话时长
        public double Hour
        {
            get { return _hour; }
            set { _hour = value; }
        }
        int _number;//短信数
        public int Number
        {
            get { return _number; }
            set { _number = value; }
        }
        public void Information()
        {
            Console.WriteLine("电话为{0}的用户,您的余额还剩{1}元,流量还剩{2}G,通话时长为{3}分钟,短信数{4}件", _phone, this.Yue, this.LiuLiang, this.Hour, this.Number);
        }
    }

7.析构函数

概念

析构函数于构造函数相对应,构造函数是对象创建的时候自动调用的,而析构函数就是对象在销毁的时候自动调用的的 

作用

当程序结束时,析构函数才会执行。主要的作用就是帮助我们来释放资源。在C#中,有一个GC机制,如果我们想要马上去释放资源,我们就可以用析构函数来进行释放。

~方法名()
{
    语句块;
}

注意:

  1. 不能在结构中定义析构函数,只能对类使用析构函数。
  2. 一个类只能有一个析构函数,无法继承或重载析构函数。
  3. 无法调用析构函数,它们是被自动调用的。
  4. 析构函数既没有修饰符,也没有参数。
  5. 析构函数的方法名必须与所在类的类名一样。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值