• C#面向对象(一):明确几个简单的概念作为开胃菜


    绝对干货,总结了下C#面向对象的干货内容以及我几年来的使用心得,分享出来

    先明确几个简单概念作为开胃菜:

    1、命名空间

    namespace BackStageManagement.Services

    关键字用于声明包含一组相关对象的作用域。 可以使用命名空间来组织代码元素并创建全局唯一类型。命名空间下可以有很多类!

    定义命名空间: namespace 空间名称{ 类 }

    引入命名空间: using 空间名称

     

    2、构造函数

    构造函数分类

      2.1.什么是构造方法?

    首先它是一个方法,然后它具有“构造”的作用,所有称之为构造方法。

    简单点说,构造方法可以对实例化出来的对象进行初始化。

    方便实例化化之后的初始化操作。

      2.2 构造方法的语法要求

    public 类名()

    {

    构造函数代码;

    }

    ①构造方法要用 public 修饰,不能用 private 修饰;

    ②构造方法没有返回值, 且连 void 也不能写!!;

    ③构造方法的方法名字必须跟类名一样;

    ④构造方法是可以有重载的。

    构造方法什么时候被调用?

    当我们使用 new 关键字实例化一个对象的时候, 会首先执行构造方法。

     public Person(string name, int age, Gender gender, string address)
    
            {
    
                this.name = name;
    
                this.age = age;
    
                this.gender = gender;
    
                this.address = address;
    
            }

      2.3 this 关键字

    this 代表当前类的对象。

      2.4.注意事项

    当我们的类中不写构造方法的时候,在代码编译后,系统会自动给它添加一个空

    构造方法,如果我们写了一个构造方法,默认的“ 空构造方法”就不会存在。

     

    这是因为我们手动谢了一个传参的构造方法,所以空的构造方法没有默认添加。

    所以使用构造方法的话,如果希望可以默认初始化,需要自己加一个

            public Person()

            {

            }

      2.5.C#静态构造函数

      静态构造函数是C#的一个新特性,其实好像很少用到。不过当我们想初始化一些静态变量的时候就需要用到它了。这个构造函数是属于类的,而不是属于哪里实例的,就是说这个构造函数只会被执行一次。也就是在创建第一个实例或引用任何静态成员之前,由.NET自动调用。

    class SimpleClass
    {
        // Static constructor
        static SimpleClass()
        {
            //
        }
    }

    在使用静态构造函数的时候应该注意几点:

      1、静态构造函数既没有访问修饰符,也没有参数。因为是.NET调用的,所以像public和private等修饰符就没有意义了。

      2、是在创建第一个类实例或任何静态成员被引用时,.NET将自动调用静态构造函数来初始化类,也就是说我们无法直接调用静态构造函数,也就无法控制什么时候执行静态构造函数了。

      3、一个类只能有一个静态构造函数。

      4、无参数的构造函数可以与静态构造函数共存。尽管参数列表相同,但一个属于类,一个属于实例,所以不会冲突。

      5、最多只运行一次。

      6、静态构造函数不可以被继承。

      7、如果没有写静态构造函数,而类中包含带有初始值设定的静态成员,那么编译器会自动生成默认的静态构造函数。

    3、属性的get和set

    get: 当通过属性名取值的时候, 会自动调用 get 中的代码;

    set: 当通过属性名给字段赋值的时候, 会自动调用 set 中的代码;

    value: 也是系统关键字, 代表赋给属性的值;

    get 和 set 本质上就是两个函数。

            private int age;
            public int Age
            {
                get { return age; }     //get:取值.
                set 
                {
                    if(value > 100 || value < 0)
                    {
                        age = 18;
                    }
                    else
    
                    {
                        age = value;
                    }
                }    //set:赋值.
            }

    4、静态方法与非静态方法

    a、静态方法的调用

    类.静态方法名([参数列表])

    非静态方法的调用

    对象 = new 类的构造函数([参数列表])

    对象.非静态方法名([参数列表])

    静态方法是属于类的,而非静态方法是属于对象的;

    Class1 test = new Class1();  
    test.HelloFJT();//调用非静态类的非静态方法  
    Class1.HelloJT();//调用非静态类的静态方法 

    b、内存的初始化

    静态成员是在第一次使用时进行初始化。非静态的成员是在创建对象的时候。

    静态构造函数只能被执行一次;非静态的构造函数可以根据需要进行多次使用。

    c、内存中存储

    静态的只有一块全局内存空间,非静态的可以有多块内存空间(副本)

    d、释放

    静态的一旦创建则在全局区一直存放,直到应用程序结束。非静态的则是由new关键字在堆中创建的。可以有多个副本。由GC进行释放。

    4.2、都有哪些静态的东西

    方法、字段、属性、事件、构造函数、类

    不能使用静态关键字的

    常量、索引器、析构函数

    4.3、静态构造函数

    非静态类中可以包含静态成员。但是,静态类中不能包含任何非静态成员。静态构造函数不能带有任何参数,而非静态构造函数可以有多种参数列表

    4.4、使用场合

    a、需要保存全局都有效的数据, 如:当前已登录用户信息、系统配置信息、系统设置

    b、因为效率相对更高,所以需要快速访问的

    c、使用频率非常高的

    注意:不要过多的滥用Static

    面向对象开发有三大特性(特点 / 特征) : 封装, 继承, 多态。我们会在下个篇章里真正的去讨论这几个特征。

     

  • 相关阅读:
    bzoj 1188 [HNOI2007]分裂游戏(SG函数,博弈)
    poj 3710 Christmas Game(树上的删边游戏)
    poj 1704 Georgia and Bob(阶梯博弈)
    110 最小路径和
    109 数字三角形
    63 搜索旋转排序数组II
    62 搜索旋转排序数组
    61 搜索区间
    58 四数之和
    关于初始值的问题
  • 原文地址:https://www.cnblogs.com/qixinbo/p/8214049.html
Copyright © 2020-2023  润新知