码农小白 深入理解类Ⅰ(类成员) C#篇

深入理解类Ⅰ(类成员)

1、类成员

类成员的类型

数据成员函数成员(执行代码)
字段方法
常量属性
构造函数
析构函数
运算符
索引
事件

2、实例类成员

类成员可以关联一个类实例,也可以关联到类的整体,即所有类的实例。可以认为每个类的实例都拥有着各自的各个类成员的副本,这些成员叫实例成员

class A
{
	public int number;
}

class Program
{
	static void Main()
	{
		A a1 = new A();
		A a2 = new A();
		a1.number = 18; a2.number = 2020;

		Console.WriteLine("a1.number = {0}, a2.number = {1}", a1.number, a2.number);
	}
}

输出结果

a1.number = 18, a2.number = 2020

3、静态成员

1、静态字段

静态字段被所有实例共享,所有实例对其访问的是同一地址。

静态字段不被实例也可访问

类名.字段名

可以用static 修饰符将字段说明为静态字段

用一个例子说明: 一个班的班费是班里所有人共享的,同学A花了5元买垃圾袋,同学B花了16元买笔记本,
那么现在剩余的班费 = 原班费 - 5 - 16
因为班费是共享的,所有每个人的可用班费都改变了

class A
{
	int number1;    //声明实例字段
	static int number2 = 5;    //声明静态字段
}
2、静态函数

同静态字段,静态方法独立于任何类实例。即使没有也能被调用

类名.方法名();

class MyMathf
{
	static int Add(int a, int b)    //声明静态方法
	{
		return a + b;
	}
}

4、从外部访问静态成员

class A
{
	int number1;    //声明实例字段
	static int number2 = 5;    //声明静态字段
	
	static int Add(int a, int b)    //声明静态方法
	{
		return a + b;
	}
}
class Program
{
	static void Main()
	{
		Console.WriteLine(A.number2);    //访问静态字段
		int tmp = A.Add(5, 9);
		Console.WriteLine(tmp);    //调用静态方法
	}
}

5、关于静态成员的补充

即使类没有实例,也存在静态成员,并且可以访问。

可以声明为静态的类成员类型

数据成员函数成员(执行代码)
√ 字段√ 方法
常量√ 属性
√ 构造函数
√ 析构函数
√ 运算符
索引
√ 事件

6、成员常量

class Myclass
{
	const int number = 99;    //定义一个常量,值为99
}

成员常量也可像访问静态字段一样访问,但成员常量不能声明为静态

7、属性

属性是代表类实例或类中的一个数据项的成员。
属性常用于类的封装

1、属性声明和访问器
  1. set访问器:用于数据的写入,返回类型为void
  2. get访问器:用于数据的读取,返回类型与属性类型相同
class A
{
	public int Var1    //声明属性
	{
		set {...}    //set访问器
		get {...}    //get访问器
	}
}
2、属性关联字段和属性的使用
class A
{
	private int var1;    //字段
	public int Var1    //关联var1字段
	{
		set    //set访问器
		{
			var1 = value;    //写入var1
		}
		get    //get访问器
		{
			return var1;    //读取var1
		}
	}
}

calss Program
{
	static void Main()
	{
		A a1 = new A();
		//a1.var1 = 5;    //错误,var1为私有字段,不可访问
		a1.Var1 = 5;    //属性Var1的写入
		Console.WriteLine(a1.Var1);    //属性Var1的读取
	}
}

输出结果

5
3、对属性执行其他计算(重点)

访问器不局限于仅仅对关联数据的传输。

class Myclass
{
	private int year;    //定义 年龄 字段
	public int Year1    //关联var1字段
	{
		set
		{
			if(value < 0)
				year = 0;    //确保年龄不为负数
			else
				year = value;
		}
		get
		{
			if(year > 18)
				return = 18;    //对年龄进行保密
			else
				return var1;
		}
	}
}
4、只读和只写属性

有时我们不希望他人更改读取我们的数据,就需要对属性进行只读只写封装。

int Var1
{
	get {...}    //属性的只读封装
}
int Var2
{
	set {...}    //属性的只写封装
}
5、属性的自动实现
class A
{
	public int Var1
	{
		get; set;
	}
}
6、静态属性
class A
{
	public static int Var1
	{
		get {...}
		set {...}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值