• c#学习历程2


    一.类的访问权限

    访问修饰符:internal ;public ;abstract 或者internal abstract 

          public abstract;sealed或internal sealed


    //不写修饰,默认为internal,同一程序集都可访问
        internal class MyClass
        { 
            
        }
        //抽象类,不能被实例化,只能被继承
        abstract class ClassA
        {

        }
        //密封类,只能被实例化,不能被继承
        sealed class ClassB
        {

        }



    二.字段方法

    字段:由三部分组成----访问修饰符,字段的类型和字段名。
    属性:是对字段的扩充,保证内部成员的完整性(这样字段可以定义为私有,通过属性赋字段值 取字段值)

    class ClassC
        {//字段
            public int a;
            public int b=1;
            public static int c=2;
            public const int d=3;
            public readonly int e;//只读类型
        }
        //属性
        class ClassD
        {
            private string name;
            private int age;
            public string Name
            {
        //value为隐形
                set{ name = value;}
                get{ return name;}
            }
            public int Age
            {
                set{ age = value;}
                get{return age;}
            }
        }

    只读属性:1.可以不写set方法 2.可以定义set为private

    只写属性:1.可以不写get方法 2.可以定义get为private


    //只读
        class ClassF
        {
            private int x;
            private int y;
            //只读
            public int X
            {
                get{ return x;}
    //            private set{ x = value;}
            }
            //只写
            public int Y
            {
                set{ y = value;}
                private get{ return y;}
            }
            //重载
            public void print(int x)
            {
                Console.WriteLine (x);
            }
            public void print(string s)
            {
                Console.WriteLine (s);
            }

        }

    注意:1.方法签名只包括参数列表,不包括返回值类型
         2.属性,字段和方法都可以定义静态类型

    二.构造方法

    回顾:

    构造函数具有以下特点。

    1:构造函数可以进行方法重载。

    2:如果没定义的话,会默认产生一个空的构造函数

    3:构造函数必须和类同名

    4:不允许返回类型 


    1.一般构造方法(和c++一样性质)

    2.静态构造方法(下边还会详细讲解)

    //静态方法(不能手动调用)
            //没有访问修饰符,无返回值,只能无参,静态无重载,
            static Person()
            {
                sex = true;
                Console.WriteLine ("static method");
            }
        

    //静态构造方法(2种触发时机)
                Person q= new Person ();//1.第一次创建对象时调用,以后都不调用,只调用一次
                Person h= new

                Console.WriteLine (Person.sex);//2.第一次引用这个对象,只触发一次

    总结:1.静态构造函数不会替代默认构造函数。
         2.创建第一个对象时,会调用这个静态构造函数。
         3.第一次引用对象


    3.析构函数

    c#不用析构函数,当混合c++时需要
    注意:1:不能在结构体中定义析构函数,只能在类中
       2:一个类只能有一个

               3:无法继承或者重载析构函数

       4:无法显示的调用析构函数,由垃圾回收器自动调用

       5:析构函数即没有修饰符也没有参数 


    三.索引器

    格式如下:
    【修饰符】数据类型 this【索引类型 index】

    class Person2
        {
            private int[] array=new int[10];
    //索引器
            public int this [int index] 
            {
                set{ array[index]=value;}
                get{ return array[index];}
            }
        }


    Person2 p2 = new Person2 ();
    p2 [0] = 1;
    p2 [1] = 2;
    Console.WriteLine (p2[1]);

    四.结构体

    结构是值类型,结构类型可以有实例构造方法和静态构造方法,但不能有析构方法
    1.实例构造方法(函数)
    是可以声明无参的构造函数(网上好多都是错的)
    2.静态构造方法

    静态构造函数用于初始化静态数据成员。

    静态构造函数有如下特点: 1、静态构造函数不能有访问修饰符和参数; 

     2、静态构造函数不能访问实例成员; (通过类名访问)

     3、静态构造函数无法直接进行调用 

    3.结构的多态和可继承性

    结构直接派生自System.ValueType,间接派生自System.Object,但结构是隐式密封的,不能作为基类再派生出其他的结构,也不能从类派生,但可以从接口派生。

    结构的特性:

    1、结构类型总是隐式密封的,因此在定义结构时不能使用sealed和abstract关键字; 

    2、因为结构不能作为基类,结构的成员不能使用如下访问修饰符:protected和protected internal; 

    3、结构的函数成员不能声明为abstract和virtual,但是可以使用override关键字,用以覆写它的基类System.ValueType中的方法。 



    总结:

    1:类定义使用class,结构体使用struct

    2:结构体中不可对声明的字段进行初始化,类可以

    3:结构体中,无论我们有没有定义构造函数,隐式的构造函数一直存在(即使定义了有参的构造函数,系统提供的无参构造函数仍然存在)

    4:结构体不能显式的定义无参数的构造函数

    5:结构体构造函数必须为所有的字段赋值

    6:创建结构体对象可以不使用new,类必须得使用

    7:结构体不能继承结构或者类,但可以实现接口;类可以继承类但不能继承结构,可以实现接口

    8:类是引用类型,结构体是值类型

    9:结构体不能定义析构函数,类可以

    10:不能用 abstract或者sealed修饰结构体,而类可以 





  • 相关阅读:
    异步加载技术实现瀑布流效果
    点击向下展开的下拉菜单特效
    几个个实用的PHP代码片段【自己备份】
    cache和buffer区别探讨
    windows 文本文件放到linux下使用
    制作rpm包
    mariadb在线热备份做主从
    检查目录下备份文件的脚本
    different between method and function
    mysql忘记root密码解决
  • 原文地址:https://www.cnblogs.com/shuaigezhaoguang/p/5869755.html
Copyright © 2020-2023  润新知