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修饰结构体,而类可以 





猜你喜欢

转载自blog.csdn.net/qq131530624/article/details/52490233
今日推荐