释一:

属性的访问器包含与获取(读取或计算)或设置(写)属性有关的可执行语句。访问器声明可以包含 get 访问器或 set 访问器,或者两者均包含。声明采用下列形式之一:

get {}

set {}

get 访问器
get 访问器体与方法体相似。它必须返回属性类型的值。执行 get 访问器相当于读取字段的值。以下是返回私有字段 name 的值的 get 访问器:

private string name;   // the name field
public string Name // the Name property
{
get
{
return name;
}
}

当引用属性时,除非该属性为赋值目标,否则将调用 get 访问器读取该属性的值。例如:

Employee e1 = new Employee();
...
Console.Write(e1.Name); // The get accessor is invoked here

get 访问器必须在 return 或 throw 语句中终止,并且控制不能超出访问器体。

set 访问器
set 访问器与返回 void 的方法类似。它使用称为 value 的隐式参数,此参数的类型是属性的类型。在下例中,set 访问器被添加到 Name 属性:

public string Name
{
get
{
return name;
}
set
{
name = value;
}
}

当对属性赋值时,用提供新值的参数调用 set 访问器。例如:

e1.Name = "Joe";   // The set accessor is invoked here

在 set 访问器中对局部变量声明使用隐式参数名 (value) 是错误的。

备注
属性按如下方式,根据所使用的访问器进行分类:

只带有 get 访问器的属性称为只读属性。无法对只读属性赋值。 
只带有 set 访问器的属性称为只写属性。只写属性除作为赋值的目标外,无法对其进行引用。 
同时带有 get 和 set 访问器的属性为读写属性。 
在属性声明中,get 和 set 访问器都必须在属性体的内部声明。

使用 get 访问器更改对象的状态是一种错误的编程样式。例如,以下访问器在每次访问 number 字段时都产生更改对象状态的副作用。

public int Number
{
get
{
return number++; // Don't do this
}
}

可以将 get 访问器用于返回字段值,或用于计算字段值并将其返回。例如:

public string Name
{
get
{
return name != null ? name : "NA";
}
}

在上述代码段中,如果不对 Name 属性赋值,它将返回值 NA。

示例 1
此例说明如何访问基类中被派生类中具有同一名称的另一个属性隐藏的属性。

// property_hiding.cs
// Property hiding
using System;
public class BaseClass
{
private string name;
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
} public class DerivedClass : BaseClass
{
private string name;
public new string Name // Notice the use of the new modifier
{
get
{
return name;
}
set
{
name = value;
}
}
} public class MainClass
{
public static void Main()
{
DerivedClass d1 = new DerivedClass();
d1.Name = "John"; // Derived class property
Console.WriteLine("Name in the derived class is: {0}",d1.Name);
((BaseClass)d1).Name = "Mary"; // Base class property
Console.WriteLine("Name in the base class is: {0}",
((BaseClass)d1).Name);
}
}

输出
Name in the derived class is: John
Name in the base class is: Mary
以下是上例中显示的重点: 
派生类中的属性 Name 隐藏基类中的属性 Name。在这种情况下,派生类的该属性声明使用 new 修饰符:

  public new string Name
{
...
转换 (BaseClass) 用于访问基类中的隐藏属性:
((BaseClass)d1).Name = "Mary";

释二:

代码如下:

public class Car
{private string color;
public string Color
{
get
{return color;
}
set
{color=value;
}
}
}

我的理解是:通过GET和SET对公有变量Color进行读写操作,实际就是间接更改color私有变量的值,那既然如此。为何不设color为public,让实例进接对color进行读写操作呢?

如果有一天,老板让你把这个类改成

当汽车的颜色改变时,同时计算一下汽车的《价格》属性

那么如果直接对Color操作,你不是死定了?

“属性”是.net的特色之一。
其实就相当于方法,尤其是java中经常会用到get、set方法(.net的有些思想就是java的)。

属性的真实作用不只是为了更改某个成员变量的值

比如form的size属性在set的同时要重画form,如果你不想让用户对color修改,就不要提供set方法

是面向对象具有的
set and get
它的用途:  一般是对类里面的变量进行操作. 而不是直接对类的变量进行操作.
有一个很大的作用就是:  便于维护.

因为:
如果一个类的一个变量int a ,在其它包或命名空间类中使用了1000次,但是过了许久,你想把a改为b,
如果直接对变量a操作的话,就得需求修改整个程序的1000处.  如果用属性了,就不会了,只需改这个方法即可

public int A
{
set
{
a = value;
}
get
{
return a;
}
}

放为:

public int B
{
set
{
b = value;
}
get
{
return b;
}
}

除去这个属性之外的地方根本不需要改变

通过上面的讲解。有一点点明白了。
是不是让满足一定条件让GET和SET来改变类中的私有变量。而不能让实例直接操作。像上面的代码保证了color属性的安全性。
既然如此可不可以写成

set
{color=value*; //value是不是相当于Color的值
}

我当初和你有一样的想法.但是现在改变了。
举个例子说明一下吧.

public class Car
{ public string Color
{
get
{
if(this.viewstate["color"]!= null)
{
return this.viewstate["color"];
}
return "":
}
set
{
this.viewstate["color"];=value;
}
}
}

在asp.net中通常这么使用.如果用变量的话就不好使用了。而且get,set中可以写多个语句.如上的get.
不知道这样解释你满意吗?

C#中get和set的更多相关文章

  1. Python开源框架

    info:更多Django信息url:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC) ...

  2. mapreduce中一个map多个输入路径

    package duogemap; import java.io.IOException; import java.util.ArrayList; import java.util.List; imp ...

  3. Hadoop 中利用 mapreduce 读写 mysql 数据

    Hadoop 中利用 mapreduce 读写 mysql 数据   有时候我们在项目中会遇到输入结果集很大,但是输出结果很小,比如一些 pv.uv 数据,然后为了实时查询的需求,或者一些 OLAP ...

  4. Python中的多进程与多线程(一)

    一.背景 最近在Azkaban的测试工作中,需要在测试环境下模拟线上的调度场景进行稳定性测试.故而重操python旧业,通过python编写脚本来构造类似线上的调度场景.在脚本编写过程中,碰到这样一个 ...

  5. .NET Core中的认证管理解析

    .NET Core中的认证管理解析 0x00 问题来源 在新建.NET Core的Web项目时选择“使用个人用户账户”就可以创建一个带有用户和权限管理的项目,已经准备好了用户注册.登录等很多页面,也可 ...

  6. Angular杂谈系列1-如何在Angular2中使用jQuery及其插件

    jQuery,让我们对dom的操作更加便捷.由于其易用性和可扩展性,jQuer也迅速风靡全球,各种插件也是目不暇接. 我相信很多人并不能直接远离jQuery去做前端,因为它太好用了,我们以前做的东西大 ...

  7. 关于CryptoJS中md5加密以及aes加密的随笔

    最近项目中用到了各种加密,其中就包括从没有接触过得aes加密,因此从网上各种查,官方的一种说法: 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学 ...

  8. In-Memory:在内存中创建临时表和表变量

    在Disk-Base数据库中,由于临时表和表变量的数据存储在tempdb中,如果系统频繁地创建和更新临时表和表变量,大量的IO操作集中在tempdb中,tempdb很可能成为系统性能的瓶颈.在SQL ...

  9. SQL Server中的高可用性(2)----文件与文件组

        在谈到SQL Server的高可用性之前,我们首先要谈一谈单实例的高可用性.在单实例的高可用性中,不可忽略的就是文件和文件组的高可用性.SQL Server允许在某些文件损坏或离线的情况下,允 ...

  10. 【.net 深呼吸】序列化中的“引用保留”

    假设 K 类中有两个属性/字段的类型相同,并且它们引用的是同一个对象实例,在序列化的默认处理中,会为每个引用单独生成数据. 看看下面两个类. [DataContract] public class 帅 ...

随机推荐

  1. sql中join与left-join图解区别

      select a.* from YG_BRSYK a left join(SELECT DISTINCT SYXH, STUFF((SELECT '.'+MS FROM #lsb where SY ...

  2. POJ 3279 - Fliptile - [状压+暴力枚举]

    题目链接:http://poj.org/problem?id=3279 Sample Input 4 4 1 0 0 1 0 1 1 0 0 1 1 0 1 0 0 1 Sample Output 0 ...

  3. 安装ipa文件

    https://www.jianshu.com/p/419a35f9533a 1.通过iTunes直接拖动到左侧的侧边栏(未尝试) 2.通过Xcode点击进入Devices管理,添加ipa文件进行安装 ...

  4. Eclipse 00: 常用快捷键

    Eclipse常用快捷键 1几个最重要的快捷键 代码助手:Ctrl+Space(简体中文操作系统是Alt+/)快速修正:Ctrl+1单词补全:Alt+/打开外部Java文档:Shift+F2 显示搜索 ...

  5. [redis] hiredis-vip 简单使用

    redis的C语言client,有几个:https://redis.io/clients#c 支持cluster的只有一个唯品会的版本:https://github.com/vipshop/hired ...

  6. xcode代码提示没了

    defaults write com.apple.dt.XCode IDEIndexDisable 0 https://www.jianshu.com/p/57a14bed9d1b

  7. css3之动画属性transform、transition、animation

    工作当中,会遇到很多有趣的小动画,使用css3代替js会节省工作量,css3一些属性浏览器会出现不兼容,加浏览器的内核前缀 -moz-. -webkit-. -o- 1.transform rotat ...

  8. 17.3-uC/OS-III消息管理(消息队列使用)

    多值信号量和和互斥信号量主要用来标志事件是否发生和协调资源的访问.如果要给资源赋予内容进行传递, 信号量就力有所不及了.这时候就需要用到 uC/OS 操作系统的另一个内核机制了,那就是消息队列. 2. ...

  9. .net 调用python 实例

    如标题 ,python属于解释型语言,所以直接将python的文件copy到项目中 新建.net控制台应用程序,直接nuget  IronPython 安装成功后 在项目内新建Sum文件夹,将py.p ...

  10. Cartographer源码阅读(6):LocalTrajectoryBuilder和PoseExtrapolator

    LocalTrajectoryBuilder意思是局部轨迹的构建,下面的类图中方法的参数没有画进去. 注意其中的三个类:PoseExtrapolator类,RealTimeCorrelativeSca ...