当前位置:网站首页>C#关于set()和get()方法的理解及使用
C#关于set()和get()方法的理解及使用
2022-08-05 04:49:00 【黄昏和星空】
》set 与 get 意思:set是设置,get是获取。顾名思义,这两个方法是对数据进行设置和获取用的。
》C#面向对象编程中的封闭性和安全性:封闭性即对类中的域变量进行封闭操作,即用private来修饰他们,其他类则不能对该变量访问。这样我们就将这些变量封闭在了类内部,这样就提高了数据的安全性。
》如何对封闭域变量进行操作:两种办法1. 通过public方式的构造函数,对象一实例化就对该变量赋值 2. 通过set和get方法。一般来说set和get方法都是对私有域变量进行操作的,所以大多数都是使用在包含特定属性的类实体中。
在上面的实例中,在给字段赋值时直接将 value 值赋给字段
namespace code_1
{
class Book
{
private int id;
private string name;
private double price;
//设置图书编号属性
public int Id
{
get { return id; }
set { id = value; }
}
//设置图书名称属性
public string Name
{
get { return name; }
}
//设置图书价格属性
public double Price
{
get { return price; }
set { price = value; }
}
}
}
》老版本的.net framework 对于属性,不能省略,必须这样做:
int adminID = 0;
public AdminID
{
get{return adminID;}
set{adminID=value;}
}
而现在的版本可以省略,仅仅需要:public AdminID{get;set;} 即不对数据进行任何操作。
使用 get set和不使用的对比
比如,有两个类person:
//第一种方式
public class person
{
public string name;
}
//第二种方式
public class person
{
public string Name { set; get; }
}
1
2
3
4
5
6
7
8
9
10
11
第一个类型的name属性未封装,其name属性直接通过public关键字暴露给系统中的其他类了
第二个类型的name属性通过get set关键字进行了封装,get和set分别对应的是可读和可写,相当于如下代码:
private string name;
public string Name//这个Name最好和属性名称相同,(如果想定义成名称不同,见文章底部)并且首字母一定要大写
{
get { return name; }
set { name = value; }
}
1
2
3
4
5
6
7
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;
}
}
}
}
边栏推荐
- Homework 8.4 Interprocess Communication Pipes and Signals
- [8.1] Code Source - [The Second Largest Number Sum] [Stone Game III] [Balanced Binary Tree]
- App rapid development and construction experience: the importance of small programs + custom plug-ins
- Excel画图
- C语言-大白话理解原码,反码和补码
- 为什么刚考完PMP,就开始准备软考了?
- [CISCN2019 华东南赛区]Web11
- University Physics---Particle Kinematics
- 数字孪生技术在电力系统中的应用现状
- Day14 jenkins部署
猜你喜欢
How to solve complex distribution and ledger problems?
C+ +核心编程
flink reads mongodb data source
雷克萨斯lm的安全性到底体现在哪里?一起来看看吧
【cesium】3D Tileset 模型加载并与模型树关联
Redis哨兵模式配置文件详解
Use IDEA to connect to TDengine server
In the WebView page of the UI automation test App, the processing method when the search bar has no search button
Homework 8.4 Interprocess Communication Pipes and Signals
小程序_动态设置tabBar主题皮肤
随机推荐
关于sklearn库的安装
SkiaSharp 之 WPF 自绘 粒子花园(案例版)
[Nine Lectures on Backpacks - 01 Backpack Problems]
[BJDCTF2020] EasySearch
JeeSite新建报表
软件管理rpm
Use IDEA to connect to TDengine server
Cron(Crontab)--use/tutorial/example
Qixi Festival earn badges
机器学习概述
How to wrap markdown - md file
Excel画图
35岁的软件测试工程师,月薪不足2W,辞职又怕找不到工作,该何去何从?
C+ +核心编程
大学物理---质点运动学
特征预处理
炎炎夏日教你利用小米智能家居配件+树莓派4接入Apple HomeKit
[8.3] Code Source - [meow ~ meow ~ meow~] [tree] [and]
Some conventional routines of program development (1)
bytebuffer 使用demo