C# 深入理解类

类成员

  • 数据成员为保存数据可以存储字段和常量
  • 函数成员做为执行部分可以存储以下部分:方法、运算符、属性、索引、构造函数、事件、析构函数
  • 语句部分顺序
// []表示方法是可选的
[特性][核心修饰符]核心申明
  • public和static同属于修饰符,索引他们的顺序是可以任意改变的

实例类成员

  • 改变实例字段的值不会影响到任何其他实例成员的值

静态字段

  • 静态字段被类的所有实例共享,所有实例都访问同一内存地址,当其发生改变的时候,类的所有实例共享改变后的值

静态成员

  • 如果不想使用前缀,只需要在该静态成员所属的类中包含一个using static的申明即可
  • 即使类没有实例,静态成员也是可以访问的
  • 静态函数成员不能访问实例成员,但是能够访问其他静态成员
  • 常量和索引器不能申明为静态成员类型

成员常量

  • 成员常量申明在类申明总,而非局部常量申明在类方法中
  • 通常是一个预定义的简单类型或者他们组成的表达式
  • 与局部常量一样,不能先声明后赋值
  • C#没有全局常量,常量必须申明在类中
  • 成员常量没有类的值也可以使用,与静态量不同,常量没有自己的存储位置,而是在编译时被编译器替换
  • 虽然很像静态值,但是不能使用static修饰符

属性

  • 属性时代表类实例或类中的数据项成员,使用属性就像写入或者读取一个字段
  • 和字段不同,属性是一个函数成员,set访问器为属性赋值,get访问器获取属性值
  • set总返回空类型,get总返回属性类型的值
  • 除了get、set两个访问器外,属性不允许有其他方法
  • 不能显示调用get、set访问器
  • 一般来说使用private修饰字段,然后提供一个public属性来控制从类的外部对该字段的访问
int MyValue
{
	set
	{
		//code
	}
	get 
	{
		//code
		return intValue;
	}
}
  • 一种约定是字段使用小写开头,而属性使用大写开头
  • 另外一种约定是字段使用下划线小写开头,属性使用大写开头
  • 只有get访问器的属性称之为只读属性,只有set访问器的属性为只写属性(一般很少用到只写属性)
  • 两个访问器至少有一个必须被定义
  • 属性并非一定和字段关联,也有可能是对一些字段的引用,其值并不一定存储在字段中
  • 可以使用子自动属性,从C#6.0开始,可以使用只读属性了
    class Simple
    {
        public int MyValue
        {
            set;
            get;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Simple s = new Simple();
            s.MyValue = 10;
            Console.WriteLine(s.MyValue);
        }
    }
  • 属性也可以申明为static

实例构造函数

  • 实例构造函数是一种特殊的方法,他在创建每个类的新实例时候执行
  • 如果允许类外部创建该实例,需要将构造函数申明为public
  • 构造函数名称和类名相同,构造函数不能有返回值
  • 构造函数可以使用参数,且可以被重载
  • 系统提供了默认的无参构造函数,如果申明了任何构造函数,那么编译器将不会为该类定义默认构造函数

静态构造函数

  • static构造函数通常初始化类级别的项,初始化类的静态字段
  • 类只能由一个静态构造函数,且不能带参数,不能带访问修饰符
  • 不能在程序中显示调用静态构造函数,系统会自动调用他们:

在类的实例被创建之前
在类的任何静态成员被引用之前

对象初始化语句

  • 字段必须是公有的
  • 初始化发生在构造方法执行之后,可能会对构造方法中设置的值产生影响
    class Simple
    {
        public int a = 1;
        public int b = 2;
    }
    class Program
    {
        static void Main(string[] args)
        {
            Simple s = new Simple {a=3, b=6 };
            // 会改变原始的a和b的值
            Console.WriteLine(s.a);
        }
    } 

析构函数

  • 它执行在类实例被销毁之需要的清理或者释放非托管资源的行为

readonly修饰符

  • 类似于const,一旦申明就无法被改变
  • const字段只能在字段的申明中初始化,readonly字段还可以在类的任意构造函数中初始化,如果是static字段,则必须在静态构造函数中完成
  • const字段必须在编译时决定,而readonly字段可以在运行时决定,所以可以在不同环境或者不同构造函数中设置不同的值

this关键字

  • this是对当前实例的引用,只能被用在以下代码块中:

实例构造函数
实例方法
属性和索引其的实例访问器

索引器

  • 一般来说我们可以使用字段名称来访问他们的数据,但是如果有索引器就可以通过下标访问
    class Employee
    {
        public string name;
        public int age;
    }
    class Program
    {
        static void Main(string[] args)
        {
            Employee e = new Employee();
            // 类似于这种
            e[0] = "yuan";
            e[1] = 18;
        }
    }
  • 索引器的表现形式
string this [int index]
{
 set 
 {
 	//code
 }
 get
 {
 	//get
 }
}

索引器和属性

  • 索引器不用分配内存来存储
  • 都是主要用来访问其他数据成员
  • 索引器通常表现为多个数据成员,而属性通常表现为单个数据成员
  • 一定程度上可以理解为索引器为多个成员提供get和set访问属性
  • 索引本身可以是任何数据类型,而非数值类型
  • 索引器总是实例成员,不能被申明为static
class Employee
    {
        public string name;
        public int age;

        public string this[int index] 
        {
            set 
            {
                switch (index) 
                {
                    case 0: name = value;
                        break;
                    case 1: age = value;
                        break;
                    default:
                        throw new ArgumentOutOfRangeException("index");
                }
            }
            get 
            {
                switch (index) 
                {
                    case 0: return name;
                    case 1: return age;
                    default: throw new ArgumentOutOfRangeException("index");
                }
            }
        }
    }

分布类和分布类型

  • 类的声明可以分割为几个分部类的声明(使用类型修饰符partial)
  • 类的分部类声明可以在一个文件中,也可在多个文件中
	partial class MyPartClass // 名称和分布类的名称一致
	{
		...
	}
	partial class MyPartClass 
	{
		...
	}
	
  • 类型修饰符partial并非是关键字,所以在其他上下文中,可以在程序中把它用作表示符
  • 当partial用在class、struct、interface之前时,它表示分布类型

分部方法

  • 分部方法是在分布类中不同部分的方法
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值