前言

重要性:

【1】属性是我们开发中只要用到对象,很多时候,都会使用。同时属性也有一定的特殊性,所以,属性学习,是一个难点(相对的)。

【2】对象引用类型。解决我们将对象做为数据传递中,数据更新的同步问题。

一、对象的属性(Propery)

我们学习软件开发的目的是什么?就是数据处理和获取信息。始终围绕“数据”展开!

所以,我们必须考虑数据如何存取的问题。

我们想到:各种数据库(关系型的SQLServer、MySql)还是非关系的(Redis、MongoDB...)

其实,我程序中,数据库处理最多的,就是内存中读取,以上数据库,只是“最后”做持久化。

我们程序中,大部分数据是有规律的。所以,我在做数据存储的时候,在内存中,我们必须用一定的方式把它保存起来。

对象有两大特征:静态特性之属性,动态特征之方法。

属性就是用来存取数据的。当然,我们对于临时数据的存储还有各种各样的局部变量。

1、对象中字段的基础使用

结论:当我们定义一个字段后,通过对象去使用,只要我们的数据符合字段的数据类型,赋值就是成功的。

问题:对于非法数据,字段是无法自己过滤的!必须要解决!

希望:我们设计一个对象,希望这个对象有基本的自我保护能力!

解决:我们通过生活的案例分析,想到,给属性增加自我的基本保护能的方法是添加业务!

案例:我们发现,属性本身没有保存数据,用户通过属性赋值、取值,最后其实都是操作的对应的私有字段。

属性本质是什么?属性的本质,其实就是两个对应的方法!

private int _courseId = 0;
public int CourseId
{
	get { return _courseId; }//读取字段值
	set//给字段赋值
	{
		if (value < 0)
			_courseId = 1000;
		else
			_courseId = value;
	}
}

结论1:属性可以添加我们需要的业务!

private int _courseYears;
public int CourseYears
{
	get
	{
		return DateTime.Now.Year - _publishDate.Year;
	}
}

结论2:属性不仅可以增加业务,还可以设置为只读属性!

对比:字段如果我们加上readonly也可以让它变成只读!但是两个有本质区别!

属性,不仅是可以做成只读,而且,可以增加业务!

public int Points
{
	get { return (_coursePrice / 100) * 2; }
}

结论3:属性不仅可以只读,而且,可以没有私有字段,只有自己的业务部分!

补充结论:属性的业务可以非常简单,也可以复杂,比如读取数据库,读取文件等都可以放到属性中。

【字段和属性对比的初步结论】属性的操作和可用性比字段丰富的多!!!!!

字段和属性的比较,我们就好比买车一样,很多功能配置,你可以不用,但是不能没有!

2、字段和属性的对比

【1】修饰类型

  • 字段:本身就是为了让你在类的《内部使用》,所以,一般字段都是private,也就是不希望你通过对象去使用字段。

  • 属性:本身就是为了让你从类的《外面使用》,所以,一般属性都是public,也就是说希望通过对象去使用属性。不过我们发现,属性本身其实并没有真正的保存数据,属性的数据保存到了私有字段。属性其实就是外界访问私有字段的一个入口。当然属性也可以没有私有字段。这种属性就是纯业务属性。

【2】业务使用

  • 字段:不能增加任何的业务!

  • 属性:可以增加我们需要的任意业务,可以在get中,也可以在set中,非常灵活。

【3】赋值取值

  • 字段:可以“任意”赋值和取值。

  • 属性:可以非常灵活的控制只读属性。同时,属性和字段是可以独立使用的。也就属性不见得有私有字段。

【4】强制要求

  • 当我们封装一个对象的时候,对外提供的只有属性,一般不能用字段,尤其是对于数据展示类型的控件

  • 控件只是解析属性,而不解析字段

3、属性的变化过程

【1】刚才给大家演示的,都是在.NET 2.0时代的时候使用的。

【2】.NET 3.0时代,出现了自动属性。

  • 自动属性:就是只有标准的set和get的情况下,我们可以省略私有的字段。

【3】.NET 4.6时代属性更加简化和灵活

二、对象引用类型

我们常用的数据类型分类有两种,一种是值类型,一种是引用类型

  1. 值类型:所谓值类型就是我们给一个变量赋值的时候,如果这个变量被传递,则这个变量会被复制一份。

    那也就意味着,我们操作新的变量,对原有变量没有影响。

    int a=10; int b=a; b++; a=? b=? 结论:a是10 b就是11

    值类型:int、double、....

  1. 引用类型:所谓引用类型,顾名思义,就是一个变量创建后,如果给这个变量作为其他变量的值,其他的
    变量会执行这个原有变量,那就说,你修改了其中一个变量,两者都会变化。

    引用类型:数组、集合、对象