关于属性的概念:
属性,通常用来声明信息与C#代码相关联,如(类型,方法,属性)是一种用于访问对象和类的特性成员;例如可以用来写字符串(string)的长度,字体的大小,窗体的属性标题样式等等等..
属性跟使用公共(public)数据源成员一样使用属性,它是有访问器的,被读取或写入的时需要执行语句,因此属性提供了一种机制,把对象的一些特性与操作关联起来,使得数据能被轻松的访问到;我们称其为“访问器”的特殊方法;属性一般是一个或者两个代码块,分别是“get” 或 “set”或者两者同时存在,get:当读取属性时,set:当向一个属性赋一个新的值的时候,同时存在意思就是当前这个属性可读可写;
更简单贴切生活的,就用一款比较火的手游来讲“王者荣耀”,一个英雄人物,它都有自己的属性,如攻击力,防御,生命值,魔法值,一件装备又有它的攻击力,抗性值,加生命值,加魔法值等等,这些都可视为这件装备的属性,或者一个角色的属性;显而易见,这样理解就对C# “属性”一词应该有了一个初步的认知;下面将详细的讲讲怎么定义一个属性到怎么熟练的去使用;
在讲使用之前,我们先了解一下属性的特点以及其注意的一些要点、
特点:
属性可向程序中添加元数据,如编译器指令或数据描述
可自检,程序通过反射检查自己的元素
通常使用属性与COM进行交互
注意点:
属性不允许使用 ref 或 out 参数进行传递,这里就不作过多的解释了;(PS:如果想深入理解详情可以参考百度谷歌,这里就不作过多的解释了)
TestDemo:
下面个例子详解,以下定义了一个Date类,类中存在一个属性day,属性提供了get 和 set,所以,day属性是可读可写的;
class Date
{
private int Day = 5;//假设值为星期五
public int day
{
get { return Day; }
set
{
//值范围在 星期1~星期7
if (value > 0 && value < 8)
{
Day = value;
}
}
}
*这里有一点值得注意,当要在其他类中调用自定义的属性时,该自定义的属性的访问级别必须为public(公开的),当属性只提供get,只读的情况下,我们在调用的时候再去为其赋值,会发生异常,说明get set两者是分开的,、不没有get访问器的属性被称为只写属性,没有set访问器的属性被称为只读属性;由此可以看出,C#中的属性提供了高度的灵活性,是C#语言中比较重要的一个部分;
如何使用属性
属性存在的两种模式:
①:在公共语言运行库中的基类库中定义的属性
②:另外一钟就是我们自己创建的,并可以向代码中添加附加信息的自定义的属性了;
下面讲简单的写一个例子来说明:首先我创建了一个控制台应用程序,在里面定义了一个People(人)类,里面定义了两个string的变量,一个int的变量,分别来记录一个人的名字,年龄,性别;给三个变量带上属性
TestDemo:
class People
{
private string name = "";
private int age = 0;
private string sex = "";
public string Name
{
get { return name; }
set { name = value; }
}
public int Age
{
get { return age; }
set { age = value; }
}
public string Sex
{
get { return sex; }
set { sex = value; }
}
}
以上是一个定义好的People类,然后我们要去使用他,所以我得将他实例化出来,显示在控制台应用程序上面;我在Program类中实例化出People类的一个对象;然后分别给他的name,sex,age赋值,并在控制台程序中输出;
Code:
namespace _20190818_1
{
class Program
{
static void Main(string[] args)
{
People Man = new People()
{
Name = "钢铁侠",
Age = 18,
Sex = "男"
};
Console.WriteLine(string.Format("{0}\r\n{1}\r\n{2}",Man.Name,Man.Age,Man.Sex));
Console.ReadKey();
}
}
用Console.WriteLine将结果输出
然后我们看得到的一个结果:
小结:前面提到访问级别,访问修饰符用来确定属性的可用范围,
public : 公开不限制对该属性的访问.protected : 只能从其所在类和所在类的子类(派生类)进行访问.
intrenal : 只有其所在类才能访问.private : 私有访问修饰符,只能在其声明类中使用.
属性,通常用来声明信息与C#代码相关联,如(类型,方法,属性)是一种用于访问对象和类的特性成员;例如可以用来写字符串(string)的长度,字体的大小,窗体的属性标题样式等等等..
属性跟使用公共(public)数据源成员一样使用属性,它是有访问器的,被读取或写入的时需要执行语句,因此属性提供了一种机制,把对象的一些特性与操作关联起来,使得数据能被轻松的访问到;我们称其为“访问器”的特殊方法;属性一般是一个或者两个代码块,分别是“get” 或 “set”或者两者同时存在,get:当读取属性时,set:当向一个属性赋一个新的值的时候,同时存在意思就是当前这个属性可读可写;
更简单贴切生活的,就用一款比较火的手游来讲“王者荣耀”,一个英雄人物,它都有自己的属性,如攻击力,防御,生命值,魔法值,一件装备又有它的攻击力,抗性值,加生命值,加魔法值等等,这些都可视为这件装备的属性,或者一个角色的属性;显而易见,这样理解就对C# “属性”一词应该有了一个初步的认知;下面将详细的讲讲怎么定义一个属性到怎么熟练的去使用;
在讲使用之前,我们先了解一下属性的特点以及其注意的一些要点、
特点:
属性可向程序中添加元数据,如编译器指令或数据描述
可自检,程序通过反射检查自己的元素
通常使用属性与COM进行交互
注意点:
属性不允许使用 ref 或 out 参数进行传递,这里就不作过多的解释了;(PS:如果想深入理解详情可以参考百度谷歌,这里就不作过多的解释了)
TestDemo:
下面个例子详解,以下定义了一个Date类,类中存在一个属性day,属性提供了get 和 set,所以,day属性是可读可写的;
class Date
{
private int Day = 5;//假设值为星期五
public int day
{
get { return Day; }
set
{
//值范围在 星期1~星期7
if (value > 0 && value < 8)
{
Day = value;
}
}
}
*这里有一点值得注意,当要在其他类中调用自定义的属性时,该自定义的属性的访问级别必须为public(公开的),当属性只提供get,只读的情况下,我们在调用的时候再去为其赋值,会发生异常,说明get set两者是分开的,、不没有get访问器的属性被称为只写属性,没有set访问器的属性被称为只读属性;由此可以看出,C#中的属性提供了高度的灵活性,是C#语言中比较重要的一个部分;
如何使用属性
属性存在的两种模式:
①:在公共语言运行库中的基类库中定义的属性
②:另外一钟就是我们自己创建的,并可以向代码中添加附加信息的自定义的属性了;
下面讲简单的写一个例子来说明:首先我创建了一个控制台应用程序,在里面定义了一个People(人)类,里面定义了两个string的变量,一个int的变量,分别来记录一个人的名字,年龄,性别;给三个变量带上属性
TestDemo:
class People
{
private string name = "";
private int age = 0;
private string sex = "";
public string Name
{
get { return name; }
set { name = value; }
}
public int Age
{
get { return age; }
set { age = value; }
}
public string Sex
{
get { return sex; }
set { sex = value; }
}
}
以上是一个定义好的People类,然后我们要去使用他,所以我得将他实例化出来,显示在控制台应用程序上面;我在Program类中实例化出People类的一个对象;然后分别给他的name,sex,age赋值,并在控制台程序中输出;
Code:
namespace _20190818_1
{
class Program
{
static void Main(string[] args)
{
People Man = new People()
{
Name = "钢铁侠",
Age = 18,
Sex = "男"
};
Console.WriteLine(string.Format("{0}\r\n{1}\r\n{2}",Man.Name,Man.Age,Man.Sex));
Console.ReadKey();
}
}
用Console.WriteLine将结果输出
然后我们看得到的一个结果:
小结:前面提到访问级别,访问修饰符用来确定属性的可用范围,
public : 公开不限制对该属性的访问.protected : 只能从其所在类和所在类的子类(派生类)进行访问.
intrenal : 只有其所在类才能访问.private : 私有访问修饰符,只能在其声明类中使用.