当前位置:网站首页>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;
}
}
}
}
边栏推荐
- [CISCN2019 South China Division]Web11
- dedecms后台生成提示读取频道信息失败的解决方法
- Cron(Crontab)--use/tutorial/example
- C+ +核心编程
- write the story about us
- In the WebView page of the UI automation test App, the processing method when the search bar has no search button
- Detailed explanation of each module of ansible
- 算法---一和零(Kotlin)
- MySql index learning and use; (I think it is detailed enough)
- 机器学习概述
猜你喜欢
开发属于自己的node包
Excel画图
AUTOCAD——标注关联
使用IDEA连接TDengine服务器
UI自动化测试 App的WebView页面中,当搜索栏无搜索按钮时处理方法
Error creating bean with name ‘configDataContextRefresher‘ defined in class path resource
【学生毕业设计】基于web学生信息管理系统网站的设计与实现(13个页面)
什么是ASEMI光伏二极管,光伏二极管的作用
Event parse tree Drain3 usage and explanation
Paparazzi: Surface Editing by way of Multi-View Image Processing
随机推荐
【8.3】代码源 - 【喵 ~ 喵 ~ 喵~】【树】【与】
[BSidesCF 2019] Kookie
基于Web的商城后台管理系统的设计与实现
请写出SparkSQL语句
Please write the SparkSQL statement
App rapid development and construction experience: the importance of small programs + custom plug-ins
University Physics---Particle Kinematics
Application status of digital twin technology in power system
程序开发的一些常规套路(一)
软件管理rpm
【测量学】速成汇总——摘录高数帮
Cron(Crontab)--use/tutorial/example
C+ +核心编程
flink读取mongodb数据源
重载运算符
四位数显表头设计
software management rpm
工业级远距离无线传输装置的功能有哪些?
Mysql的redo log详解
4T硬盘剩余很多提示“No space left on device“磁盘空间不足