C#中的属性和字段

  • 属性和字段的区别

在C#中,我们可以自由的访问公有字段,但在一些场合中,我们可能希望限制字段的赋值范围、或是要求字段只能读或只能写,或是在改变字段时能改变对象的其他一些字段值,这些单靠字段是无法做到的,于是就有了属性,属性中包含两个块:set和get,set块负责属性的写入工作,get块负责属性的读取工作。

  • get和set

 有两个类person:

public class person

{

public string name;

}

public class person

{

public string Name{set;get;}

}

第一个类型的name属性未封装,其name属性直接通过public关键字暴露给系统中的其他类了,而第二个类型的name属性通过get set关键字进行了封装,get和set分别对应的是可读和可写,相当于如下代码:

private string name;

public string Name

{

get { return name; }

 set { name = value; }

  }

简单说下区别吧:当实例化第一个“person”这个类时,系统在分配内存空间时对name属性直接分配内存,之后对name属性的操作也是直接操作内存中name属性所在的这个块;而当实例化第二个“人”类型时,系统会先分配一个叫name的private私有的内存空间(此处的name对于类的内部使用,Name对于外部操作使用,要有所区分),之后的读与写的操作都是通过Name这个public的类似于指针的东西来关联name进行,以此达到封装的目的,并且通过get和set关键字也可以控制可读还是可写。

至于get和set的作用,除了控制读写之外还有其他的作用,举个简单的例子,比如说当我给Name赋值的时候想要先进行一些逻辑判断,就可以这样:

private string name;

public string Name

{

get { return name; }

set

{

name = String.IsNullOrEmpty(value) ? "空" : value;

}

}

再举例说明下:

假设类是一银行,既能存钱也能取钱

Private Money;

Private class bank()

{

get

{

return Money;

}

Set

{

Money=value;

}

}

Money 就像银行里的自动取款机,你看不见里面的Money,但你能用set(存钱),用get(取钱)。Money是一个私有字段,是分装在类中的,类以外的程序不能直接访问的。C#中get、set用法中,类的set和get成员是外部程序访问类内部属性的唯一方法,就像你去银行取钱,你不能直接从银行的保险柜里拿钱,而是银行营业人员把钱取出来给你的。

属性在调用者看来就像一个普通的变量,但作为类的设计者,你可以利用属性来隐藏你类中的一些字段,使外界只能通过属性来访问你的字段,你可以通过属性来限制外界对你的字段的存取,就利用get、set。如果想让用户随意存取你的字段,那么就实现get、set;如果只想让用户读取字段,就只实现get;若只想让用户写字段就只实现set。同时还可以在set和get中对用户传递的值进行一些验证工作,以确保你的字段将含有正确的值。

  综上使用get,set把字段封装为属性可以实现以下几点:

  1.    对字段进行保护----类外部不能直接访问字段的内存
  2.    对字段读写进行限制-----只允许读或者只允许写
  3.    在对字段赋值取值时做一些操作
时间: 2024-11-06 13:39:39

C#中的属性和字段的相关文章

Java中的属性和字段有什么区别

1.Java中的属性和字段有什么区别? 答: Java中的属性,通常可以理解为get和set方法. 字段,通常叫做“类成员”. 属性只局限于类中方法的声明,并不与类中其他成员相关.例如: void setA(String s){} String getA(){} 当一个类中拥有这样一对方法时,我们可以说,这个类中拥有一个可读写的 a 属性(注意是小写a).如果去掉了set的方法,则是可读属性,反之亦然. 类成员(字段),通常是在类中定义的类成员变量,例如: public class A{ pri

子类对父类中的属性和字段的改写

子类对父类中的属性和字段的改写 刚开始听老师讲,字段要用private来修饰,属性用public来修饰,通过属性来控制字段,字段存储数据. 那为什么要用private来修饰字段呢??? 原因:防止外部人员通过子类来改写父类中的属性以及字段,从而破坏了项目的初衷,造成严重的后果. 例子: 父类及成员: class Bea { public Bea(int age,string name) { this.Name = name; this.Age = age; } public int _age;

C#类中的属性和字段

字段就是类中自定义的一些变量或是常量,用来记录此类的相关信息和属性,通常和外部定义没什么区别,就是需要添加public等修饰符: 属性也是是类中的概念之一,就是外部访问内部私有(private)字段的一个函数方法, 一般分为自定义属性: 使用get,set访问器自定义对字段赋值 默认定义, 只声明get和set不具体指定,则会默认生成属性字段. 注意只读和只写属性可以通过只定义get和set中的一个来实现: 属性也可以设置值来限制对字段的访问,例如在set中可以添加判断,get返回中可以返回其他

sphinx中复合属性字段sql_attr_multi的用法

sphinx中复合属性字段sql_attr_multi的用法 sql_attr_multi在sphinx可以用来检索有层级关系的数据,效率相当高,如,在数据库中用一个4层的分类,分类下对应着不用的文章,现在需要做一个文章列表,要求,选择第一级分类时属于它的子分类的文章也要显示出来,就可以用下面的方法建索引 sql_query=                 SELECT di.company_document_id as id,di.company_document_id,          

Access中的数据类型和字段属性

数据类型 用途 文本 字符.数字或字符与数字的任意组合,不能用于计算.最长255个字符,默认长度为50个字符.对于指定的大小,存放中文汉字与英文字母的个数都是一样的 备注 超长的文本,用于注释或说明,最长65535个字符 数字 用于计算的值,1.2.4或8字节 日期/时间 表示日期和时间,可用于计算,最多8字节 货币 表示货币的数据类型,可用于计算,小数点左边最多为15位,右边可精确到4位,最多8字节 自动编号 Access为每条记录提供唯一值的数值类型,常用做主码,4字节 是/否 布尔型,1字

C#中的类:字段、属性、方法

C++的类中可以有三种内容:成员变量.成员函数和友元. 一般来说,成员变量描述类的属性,成员函数描述类的操作,友元则是一种特殊的声明,被声明为友元的函数或类可以操作自己的私有成员变量和成员方法. 在Java中,类的成员有两类:属性,相当于C++的成员变量:方法,相当于C++的成员函数. 而在C#中,类的成员有四种:字段.属性.方法和事件(事件还没学到,暂缓解释). 字段相当于C++中的成员变量和Java中的属性,就是在类中定义的变量(可以是基本类型或引用类型),一般来说,字段都被定义为私有. 方

Java中属性和字段的区别 ,很多人都分不开吗.尤其是反射技术之上的mybatis,spring配置,jstl 标签

Java中的属性,通常可以理解为其属名性时根据get和set方法名得出的. 而字段,通常叫做"对象成员". 其规则是:去掉get或set后其剩余的字符串,如果第二个字母是小写的,则把第一个字母也变成小写 getAge---->age getCPU---->CPU 属性只局限于类中方法的声明,并不与类中其他成员相关,属于javabean的范畴.例如: void setA(String s){} String getA(){} 当一个类中拥有这样一对方法时,我们可以说,这个类中

如何将Sql server数据库中的模型图转化到Word中--并能够查看字段的属性信息

1. 在Sql server数据库中创建数据库的模型图 -- Database Diagrams 2. 控制面板--管理工具--ODBC数据源链接--创建一个Sql server的数据源链接 3. 打开Visio工具,打开数据库模型--Database--Reverse Engineer[反向工程] 选择要导入到Visio中的表: 4. 将DB的表结构导入到Visio中,界面可能需要略微调整一下 可以在Visio中查看字段的详细信息 将Visio保存成一个文件. 5.打开Word,插入对象 将V

Django中ORM模型总结(二)[模型类的对应关系,模型类的属性,字段类型]

模型类的对应关系 多对多 创建模型类----->新闻类型类 class TypeInfo(models.Model): """创建新闻模型类""" tname = models.CharField(max_length=20) 创建模型类----->新闻内容类 class NewInfo(models.Model): """闯将新闻内容类""" ntitle = models