C# 对get和set的理解

使用 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//这个Name最好和属性名称相同,(如果想定义成名称不同,见文章底部)并且首字母一定要大写
{
    get { return name; }
    set { name = value; }
}

c#在定义类时,通常要把类中声明的对象封装起来,使得外界不能访问这个属性。上述代码中如果去掉set部分,则外界只能读取name的值,如果去掉get部分,则只能给name赋值。这样就可以控制外界对私有属性name的访问权限了,这种写法是C#的一个特性。

当然你也可以通过自己创建函数来对name进行取值和赋值,但这样就显得比较麻烦了。

属性与普通变量不同就在于, 普通变量就是放在屋子里的东西, 是什么样明明白白. 而属性则是在屋子的门口放了个守门人, 你拿东西放东西要经过他.

这个守门人就是属性访问器, 拿东西就是 get, 放东西就是 set. 怎么拿怎么放是它说了算, 虽然你觉得好像就是直接拿直接放差不多.
GET SET 就是对外的接口 ,一般在实例中访问成员数据需要这个成员数据的访问方式为PUBLIC ,现在C#很高级了,GET 就是获取,SET 就是设置,但是它提供了跟好的收缩性,对GET 和SET 可以单独设置访问权限 比如你对某个成员数据只能读取或者只写,或者只有派生类可以访问等。。。 相对以前来说,没有属性访问器,需要通过函数来调用私有成员数据,属性提供了高效的访问模式和简单的书写。
就是为了安全啊~
字段是你具体要操作的数据所以他的值不能出错,可是你又不能避免用户犯错
为了安全就用属性来给字段赋值,因为 在set中你可以对数据的安全进行验证,
get就更简单了验证完数据了就要把值给了字段所以要get
set的中文意思是“设置”;
get的中文意思是“获得”;

补充:

get 和 set 会在相应的时候自动调用
主要是为了隐藏程序内的数据结构时用
get是获取该属性的值,
set设置该属性的值。
在用set时有一个特殊的变量value
就是设置属性时的值

value 隐式参数,用于设置访问器以及添加或移除事件处理程序。

对类的属性进行 设置
比如用类名.属性=“”赋值 set作用
变量=类名.属性 取值 get 作用

完整代码示例

如果value<0,则定义radius=0,否则,将value赋值给radius属性

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace test
{
    class Program
    {
        static void Main(string[] args)
        {
            Circle circle = new Circle();
            circle.Radius = -1;

            Console.WriteLine("Radius is " + circle.Radius);//这样使用
        }
    }

    class Circle
    {
        const double pi = 3.1415;
        private double radius;

        public double Radius//这样定义
        {
            get => radius;
            set
            {
                if (value < 0) radius = 0;
                else radius = value;
            }
        }
    }
}

还可以改成这样(注意带底色的字)

你可能感兴趣的:(C#)