抱歉,你查看的文章不存在

C#——set和get

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/22647989

       在面向对象编程(OOP)中,要求把是不允许外界直接对类的成员变量直接访问的,既然不能访问,那定义这些成员变量还有什么意义呢?所以C#中就要用set和get方法来访问私有成员变量,它们相当于外界访问对象的一个通道,一个“接口”。先来看一段代码:

 class Employee
    {
        private string name;
        private byte age;
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        public byte Age
        {
            get { return age; }
            set { age = value; }
        }
    }

        代码中定义了两个私有变量name和age,当我们不想让外界随意访问该私有变量时,可以使用属性来访问,语法为:

    public <返回类型(要与被访问变量的类型相同)> <属性名(不能与被访问变量同名)>
        {
            get{ return <被访问变量>;}
            set{ <被访问变量> = value;}
        }

       当我们使用属性来访问私有成员变量时就会调用里面的get方法,当我们要修改该变量时就会调用set方法,当然在定义的时候可以只定义一个get方法或只定义一个set方法。如果只定义get方法,那么这个相应变量就是“只读”的;如果只定义set方法,那么相应变量就是“只写”的。

       看到这时,我有个问题,既然外界可以通过set和get访问类内私有成员,那为什么不直接把它定义成共有,直接供外界访问呢?拿上面的Employee类来说明:

class Employee
    {
        private string name;
        private byte age;
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        //****修改后****↓↓↓↓↓↓↓↓
        public byte Age
        {
            get { return age; }  
            set
            {                
                if (value > 10 && value<=100)   //一般在公司雇员的年龄都在10到100岁之间
                age = value;   
            }
        }
        //****修改后****↑↑↑↑↑↑↑↑
    }

        相信看完这个例子就能够很清楚了,例子中,set就像一位门卫大叔一样,只有好人才能进来。可以通过属性来控制对员变量的读写,防止对成员变量的非法赋值等。

        前几天学术交流会上刚说到了客户变更的问题,它们在这方面就有非同小可的作用,还是举个小例子:

        有一个温度计的类:

class Thermometer
    {
        private double temperature;
        public Thermometer(double temperature)  //构造函数
        {
            this.temperature = temperature;
        }
        public double Temperature
        {
            get { return temperature; }
            set { temperature = value; }
        }
    }

       假设这里的温度单位表示的是摄氏度(℃),如果在需求分析阶段误解了客户的原始意愿或者客户在日后变更了需求,需要把系统中所有表示温度的变量temperature都用来表示开尔文温度(K)。那么不必动系统中成百上千个Temperature属性,只需在get和set函数中稍微修改一下代码即可:

class Thermometer
    {
        private double temperature;
        public Thermometer(double temperature)  //构造函数
        {
            this.temperature = temperature;
        }
        public double Temperature
        {
            //****修改后****↓↓↓↓↓↓↓↓
            get { return temperature-273.15; }
            set { temperature = value+273.15; }
            //****修改后****↑↑↑↑↑↑↑↑
        }
    }

        下面简单建一个控制台应用程序来测试一下,主函数为:

 class Test
    {
        static void Main(string[] args)
        {
            Thermometer a = new Thermometer(40);
            Console.WriteLine(a.Temperature);
        }
    }

         用构造函数给温度设的初值为40度,因此代码修改前运行结果为:

         代码修改后运行结果为:

         如有不足与纰漏,恳请您留下宝贵意见与建议,感激不尽!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

Danny的专栏

164 篇文章27 人订阅

相关文章

来自专栏IT派

Code | Python30个编程技巧!

1. 原地交换两个数字 Python 提供了一个直观的在一行代码中赋值与交换(变量值)的方法,请参见下面的示例: ? 3. 使用三元操作符来进行条件赋值 三元...

3604
来自专栏Python小屋

Python字符串index()方法应用案例一则

653
来自专栏Java学习网

学习Java需吃透这些基本概念

学习好比盖房子,打地基好很重要,房了能盖多高关键看地基;学习同样道理,基础知识是以后学习一切技术的必要条件,我们在准备学习一门开发语言时,首先要学习它的基础,不...

25410
来自专栏Java爬坑系列

【Java入门提高篇】Day16 Java异常处理(上)

1575
来自专栏数据结构与算法

2492 上帝造题的七分钟 2

 时间限制: 1 s  空间限制: 64000 KB  题目等级 : 大师 Master 题解 题目描述 Description   XLk觉得《上帝造题的七分...

3717
来自专栏北京马哥教育

鲜为人知的 Python 语法

所有人(好吧,不是所有人)都知道 python 是一门用途广泛、易读、而且容易入门的编程语言。

891
来自专栏AhDung

C#遐想/瞎想

1152
来自专栏积累沉淀

Java设计模式(十四)----模板方法模式

模板方法模式 一、概述 二、结构 三、具体案例 四、优缺点和设计思想 一、概述 模板方法模式是类的行为模...

2205
来自专栏IT派

Python:编写条件分支代码的技巧

编写条件分支代码是编码过程中不可或缺的一部分。 如果用道路来做比喻,现实世界中的代码从来都不是一条笔直的高速公路,而更像是由无数个岔路口组成的某个市区地图。我们...

1550
来自专栏java学习

Java每日一练(2017/7/25)

最新通知 ●回复"每日一练"获取以前的题目! ●【新】Android视频更新了!(回复【安卓视频】获取下载链接) ●【新】Ajax知识点视频更新了!(回复【学习...

2645

扫码关注云+社区

领取腾讯云代金券