MSDN中是这么介绍字段和属性的:

A field is a variable of any type that is declared directly in a class or struct.

字段:“字段”是直接在结构中声明的任何类型的变量。

A property is a member that provides a flexible mechanism to read, write, or compute the value of a private field.Properties can be used as if they are public data members, but they are actually special methods called accessors.This enables data to be accessed easily and still helps promote the safety and flexibility of methods.

属性是这样的成员:它们提供灵活的机制来读取、编写或计算私有字段的值。可以像使用公共数据成员一样使用属性,但实际上它们是称为“访问器”的特殊方法。这使得数据在可被轻松访问的同时,仍能提供方法的安全性和灵活性。

字段是变量,而属性是方法。字段一般是private的,而属性一般是public的。外部代码可以通过属性来访问字段,实现对字段的读写操作,所以属性又称访问器。

属性可以控制外部代码对字段的访问权限:通过只实现get访问器,使字段是只读的;通过只实现set访问器使字段是只写的;同时实现get和set访问器,则外部可对该字段进行读写操作。

①属性同时包含 get 和 set 访问器,允许任何对象读写该属性。相应的任何对象也可以对该属性所对应的字段进行读写操作。

     public class Person
{
//-----------------------
//可读可写
//-----------------------
private string name;
/// <summary>姓名</summary>
public string Name
{
get
{
return this.name;
}
set
{
this.name = value;
}
}
}

②属性只包含get访问器,省略set访问器,则该属性为只读的。相应的外部代码只能对该属性所对应的字段进行读操作。

     public class Person
{
//-----------------------
//只读
//-----------------------
private string name;
/// <summary>姓名</summary>
public string Name
{
get
{
return this.name;
}
}
}

③属性只包含set访问器,省略get访问器,则该属性为只写的。相应的外部代码只能对该属性所对应的字段进行写操作

     public class Person
{
//-----------------------
//只写
//-----------------------
private string name;
/// <summary>姓名</summary>
public string Name
{
set
{
this.name=value;
}
}
}

属性可以对字段的写操作进行有效性验证。

     public class Person
{
//-----------------------
//有效性验证
//-----------------------
private int age;
/// <summary>年龄</summary>
public int Age
{
get
{
return this.age;
}
set
{
if (value <= || value >= )
{
throw new ArgumentOutOfRangeException("Age", "The range of age is between 1 and 150.");
}
}
}
}

C#:字段与属性的更多相关文章

  1. C#——字段和属性

    //我的C#是跟着猛哥(刘铁猛)(算是我的正式老师)<C#语言入门详解>学习的,微信上猛哥也给我讲解了一些不懂得地方,对于我来说简直是一笔巨额财富,难得良师! 在刚开始学习属性这一节时,开 ...

  2. [.net 面向对象编程基础] (10) 类的成员(字段、属性、方法)

    [.net 面向对象编程基础] (10) 类的成员(字段.属性.方法) 前面定义的Person的类,里面的成员包括:字段.属性.方法.事件等,此外,前面说的嵌套类也是类的成员. a.类的成员为分:静态 ...

  3. .NET面试题解析(05)-常量、字段、属性、特性与委托

      系列文章目录地址: .NET面试题解析(00)-开篇来谈谈面试 & 系列文章索引 弱小和无知不是生存的障碍,傲慢才是!——<三体> 常见面试题目: 1. const和reado ...

  4. C#.NET如何不序列化字段、属性

    当我们使用公开属性以及公开字段时,都可以顺利的被序列化, 01.[Serializable] 02.public class MyClass 03.{ 04.    public int ID; 05 ...

  5. mysql字段额外属性,除去字段类型外的其他属性

    如果你不想字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据库时如果输入该字段的数据为NULL ,就会报错. AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自 ...

  6. 不允许修改SQLserver2008r2表中字段的属性问题

    SQLserver2008r2修改表中字段的属性时弹出 点击工具->选项,取消阻止保存要求重新创建表的更改

  7. 1.4.2 solr字段类型--(1.4.2.1)字段类型定义和字段类型属性

    1.4.2 solr字段类型 (1.4.2.1) 字段类型定义和字段类型属性. (1.4.2.2) solr附带的字段类型 (1.4.2.3) 使用货币和汇率 (1.4.2.4) 使用Dates(日期 ...

  8. C# 字段、属性、成员变量

    引言: C#与java,C++中的这些基本概念略有不同. 由于easy混淆,所以这里总结下差别. 希望能对刚開始学习的人有帮助! 一.定义与作用 1.字段(field):是C#类级别定义的,和方法同一 ...

  9. [一]class 文件浅析 .class文件格式详解 字段方法属性常量池字段 class文件属性表 数据类型 数据结构

    前言概述  本文旨在讲解class文件的整体结构信息,阅读本文后应该可以完整的了解class文件的格式以及各个部分的逻辑组成含义   class文件包含了java虚拟机指令集 和  符号表   以及若 ...

随机推荐

  1. (顺序表的应用5.4.2)POJ 1591 M*A*S*H(约瑟夫环问题的变形——变换步长值)

    /* * POJ_1591_2.cpp * * Created on: 2013年10月31日 * Author: Administrator */ #include <iostream> ...

  2. 关于mac book 的启动选项

    苹果电脑是用EFI的,没有BIOS,唯一可以设置的是开机的启动选项.可以在基于 Intel 的 Mac 电脑上使用下列启动键组合启动时按住 C 键——从可启动 CD 或 DVD 光盘启动,如随机附带的 ...

  3. USB 设备类协议入门【转】

    本文转载自:http://www.cnblogs.com/xidongs/archive/2011/09/26/2191616.html 一.应用场合 USB HID类是比较大的一个类,HID类设备属 ...

  4. html5 教程网站

    html5 MDN Canvas tutorial Canvas教程 canvas: 阮一峰 在那山的那边海的那边有一群程序猿 使用 HTML5 canvas 绘制精美的图形 HTML5定稿了,为什么 ...

  5. 严重: IOException while loading persisted sessions: java.io.EOFException

    tomcat在启动时出现如下异常问题: 严重: IOException while loading persisted sessions: java.io.EOFException 严重: Excep ...

  6. Oracle 行迁移和行链接

    一.行迁移 1.1.行迁移概念 当一个行上的更新操作(原来的数据存在且没有减少)导致当前的数据不能在容纳在当前块,我们需要进行行迁移.一个行迁移意味着整行数据将会移动,仅仅保留的是一个转移地址.因此整 ...

  7. Codeforces 735C:Tennis Championship(数学+贪心)

    http://codeforces.com/problemset/problem/735/C 题意:有n个人打锦标赛,淘汰赛制度,即一个人和另一个人打,输的一方出局.问这n个人里面冠军最多能赢多少场, ...

  8. “wsimport -keep ”生成客户端报错“Use of SOAP Encoding is not supported.”

    本来想用 “wsimport -keep ” 生成客户端,结果报错“Use of SOAP Encoding is not supported.” 应该是缺jar包, 闲麻烦就发现了百度经验上的 这个 ...

  9. mongo 日记

    分组代码片段 命令行代码: aggregate({$group:{_id:{A:'$A',B:'$B',C:'$C'}}}) 拿出唯一号有重复的数据: > db.aaaa.aggregate([ ...

  10. App store 如何使用 promo code | app store 打不开精品推荐和排行榜

    1. app store 如何使用 promo code: 在app store的 右下角精品推荐标签页,拉到最下面 点击“兑换” ,跳转到新的页面,输入兑换码,然后右上角“兑换”,程序开始自动下载并 ...