C#中get和set访问器的用法

C#中的get和set访问器可用来获取和设置类中字段(即属性)的值,通过get和set访问器提供访问接口,从而可以避免对字段的直接访问造成的不安全性。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ConsoleApplication3
{class Program{static void Main(string[] args){User user = new User(12115789, "兄弟", "余华", 78.5);user.PrintInfo();Console.ReadLine();}}class User{/* ---------------方法1:开始--------------- */private int id;             //书本IDprivate string name;        //书本名称private string author;      //书本作者private double price;       //书本价格public int Id{get{return id;}set{id = value;}}public string Name{get{return name;}set{name = value;}}public string Author{get{return author;}set{author = value;}}public double Price{get{return price;}set{price = value;}}/* ---------------方法1:结束--------------- *//* ---------------方法2:开始--------------- *///public int Id { get; set; }             //书本ID//public string Name { get; set; }        //书本名称//public string Author { get; set; }      //书本作者//public double Price { get; set; }       //书本价格/* ---------------方法2:结束--------------- *//// <summary>/// 构造函数/// </summary>/// <param name="id"></param>/// <param name="name"></param>/// <param name="price"></param>public User(int id, string name, string author, double price){this.Id = id;this.Name = name;this.Author = author;this.Price = price;}/// <summary>/// 打印书本信息/// </summary>public void PrintInfo(){Console.WriteLine("==================================");Console.WriteLine("书本信息如下:");Console.WriteLine("ID:" + this.Id);Console.WriteLine("名称:" + this.Name);Console.WriteLine("作者:" + this.Author);Console.WriteLine("价格:" + this.Price);Console.WriteLine("==================================");}}
}

方法1使用get和set访问器:

public 数据类型 属性名
{get{return 字段名;}set{字段名 = value;}
}
  • get{},get访问器用于获取类中字段的值,需要在get语句中使用return返回一个和字段类型相匹配的值。若希望该属性为只写属性,则在属性的定义中省略get()访问器。
  • set{},set访问器用于设置类中字段的值,将程序中传给属性的值赋值给字段。若希望该属性问只读属性,则在属性的定义中省略set()访问器。

方法2使用get和set访问器:

可以再如上代码重看到方法1的用法代码大量重复,因此C#中将属性的设置也可以简化为:

public 数据类型 属性名{ get; set; }

使用方法2定义属性时无需先定义字段,响当于C#中会自动生成一个和属性名相对应的私有字段,这个私有字段对任何类成员都不开放,只能通过定义的属性进行访问,这种属性的定义方式也成为自动属性设置。

  • get{},get访问器在自动属性中不能省略,若需要设置为只写属性则需在get前加private进行声明。
  • set{},set访问器在自动属性中可以省略,省略后表示该属性为只读属性

 

当类的成员(包括成员方法和成员函数)是用static声明,访问类的成员时直接使用“类名.类成员”的方式。

当类的成员不是用static声明时,访问类的成员时直接使用“类的对象.类成员”的方式。

需要特别注意的是:若将类中的方法使用static声明为静态方法,则在该方法中只能直接访问使用static声明的成员,非静态成员只能通过类的对象才能访问。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/429523.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

asm扩容流程_Oracle rac asm 扩容

环境介绍&#xff1a;故事发生在Oracle 11.2.0.4 RAC/ Linux 6.8 的数据库集群服务器上。DATA/ ARCH/ 磁盘组空间不足&#xff0c;进行扩容。首先&#xff0c;如果要在线使用udev方式扩容asm&#xff0c;建议先备份两个节点所有在用网卡信息&#xff0c;避免bug误删除网卡信息。…

计分员计分程序

1.估计这个任务需要多长时间&#xff1a;两星期 2.需求分析&#xff1a; 作为一名现场记分员&#xff0c;我希望详细记录比赛现场比分增长情况&#xff0c;以便观众及运动员、教练员及时掌握比赛状况。&#xff08;满意条件&#xff1a;每一次比分的改变&#xff0c;都要形成一…

蓝牙入门基础知识(一)

蓝牙起源 1995年5月20日&#xff0c;在美国华盛顿州&#xff0c;索尼爱立信、IBM、英特尔、诺基亚、东芝成立了蓝牙技术联盟&#xff08;Bluetooth Special Interest Group&#xff0c;SIG&#xff09;。SIG是一个制定蓝牙规范&#xff0c;推送蓝牙技术发展的国际组织。SIG授权…

用python将图片写入ppt_用python做ppt服务用于导入图片

项目需要做WINFORM程序与powerpoint交互&#xff0c;把winform生成的图片自动拷贝到ppt中。目前使用python做了一个简单的服务解决。由于要求是32位程序&#xff0c;所以下面全都是32位的版本。第一步&#xff0c;安装python2.7 32位。第二部&#xff0c;安装py2exe 32位。第三…

C#语言入门详解---委托(刘铁猛)

委托&#xff1a;函数指针的升级版&#xff0c;可以类比C语言中的函数指针进行理解 变量的本质就是以变量名所对应的内存地址为起点的一段内存&#xff0c;这段内存中存储的就是变量的数据&#xff0c;这段内存的大小由变量的数据类型决定。 函数代表算法&#xff0c;函数的本…

【LintCode题集】Q6、Q64

最近开始刷LintCode上的题目&#xff0c;先从标签为容易的开始刷。今天刷的这两题目差不多为同一类型的题目&#xff0c;都是为按照一定的规则合并两个已经有序的数组。 [Q6] 描述&#xff1a; 合并两个排序的整数数组A和B变成一个新的数组。 样例&#xff1a; 给出A[1,2,3,4]&…

input标签的值只能两位小数_解决input只能输入金额类型的方案(金额输入框只能输入2位小数)...

欢迎加我技术交流QQ群 &#xff1a;811956471前言&#xff1a;最近在用uni-app框架&#xff0c;写一个项目(支付宝和微信小程序)遇到一个需求&#xff0c;要求金额输入框只能输入2位小数&#xff0c;且第一位数不能是 "."&#xff0c;只能是数字。发现用 input事件监…

C# winform中判断控件类型

C# winform中对控件类型的判断&#xff1a; public void UpdataControl(Control control, string data) {if (control is TextBox){doSomething1();}if (control is Label){doSomething1();}if (control is Button){doSomething1();}}

单元测试原来是这样的呼

我们要先创建一个界面&#xff1a; 显示的界面是这样的&#xff1a; 接下来我们来写java代码&#xff0c; 在输入框里的内容&#xff0c;点击button&#xff0c;将数据显示到上面的textview. 后面写测试用例&#xff0c;但我不知道哪里出错了&#xff0c;不知道是不是创建就出错…

python生成表达式_说说 Python 的生成器表达式

列表推导与生成器表达式都可以用于初始化元组、数组或其他类型的序列。但列表推导需要先建立一个完整的列表&#xff0c;然后再把这个列表传递到某个构造函数。而生成器表达式会逐个产出元素&#xff0c;这样显然能够节省内存。列表推导写法&#xff1a;codes [ord(symbol) fo…

C#中宏定义#define、预处理#if #else #endif的使用

C#中预处理的使用&#xff1a; 预处理指令并不会被编译为执行代码中的指令&#xff0c;但使用预处理指令可以选择编译程序中的哪部分代码。一般在调试代码时或在发布不同功能等级的软件版本中使用。 需要特别注意的是&#xff0c;宏定义必须在C#的.cs源文件最开头的位置定义&am…

华硕vm510l装固态硬盘_华硕VM510L拆机换固态硬盘

首先看下需要准备的东西&#xff0c;一台华硕笔记本&#xff0c;螺丝刀&#xff0c;固态硬盘。微信图片_201910051157221.jpg1.先把背面的螺丝全部卸掉。微信图片_20191005115722.jpg2.反过来&#xff0c;暴力拆键盘&#xff0c;从边缘部分开始撬。注意键盘下面有排线&#xff…

C# 串口接收1次数据会进入2次串口接收事件serialPort1_DataReceived,第2次进入时串口缓冲区为空

在C#中使用串口接收数据时发现&#xff0c;在完整的接收完一次数据后&#xff0c;还会再次进入串口接收事件。 在网上搜索资料发现其他开发者也有遇到该问题&#xff1a; [1] c#串口事件接受一次数据莫名其妙会触发两次 原文链接&#xff1a;https://www.52pojie.cn/threa…

js里的面向对象分析-(创建实例化对象)

ECMAScript 有两种开发模式&#xff1a;1.函数式(过程化)&#xff0c;2.面向对象(OOP)。面向对象的语言有一个标志&#xff0c;那就是类的概念&#xff0c;而通过类可以创建任意多个具有相同属性和方法的对象。但是&#xff0c;ECMAScript 没有类的概念&#xff0c;因此它的对象…

swift 隐藏状态栏_如何在Swift iOS应用中隐藏状态栏?

我想删除屏幕顶部的状态栏。这不起作用&#xff1a;func application(application: UIApplication,didFinishLaunchingWithOptions launchOptions: NSDictionary?)-> Bool{application.statusBarHidden truereturn true}我也尝试过&#xff1a;func application(applicati…

C#控件跨线程内容更新

在使用C#开发winform应用程序时&#xff0c;经常会碰到对控件跨线程访问造成的异常。在winform中UI线程和工作线程是分开的&#xff0c;但在实际使用中经常会需要在工作线程更新UI线程中创建的控件。 方法1&#xff1a;禁用跨线程访问控件检测 .NET默认开启了禁止跨线程控件访…

document.addeventlistener方法不执行_JUnit 5 测试方法的执行优先级

前言使用单元测试有时对方法的执行顺序有要求&#xff0c;而默认情况下测试方法的执行并非按照编写顺序&#xff0c;这就导致测试用例因执行顺序而导致的不通过。这里我使用的JUnit版本是5.6.2&#xff0c;下面讲述如何自定义测试方法的执行优先级。TestMethodOrder这个注解标注…

2异常处理_Java处理异常2种机制关键字区别解析

在异常处理的过程中,throws和throw的区别是?throws:是在方法上对一个方法进行声明,而不进行处理,而是向上传,谁调用谁处理.throw:是在具体的抛出一个异常类型.throws的栗子:throws的话,就是这个方法有可能会产生异常,而我只是将它声明出去,我自己不处理,如果有人调用的时候,可…

Scrapy——1

python3安装scrapy:http://www.cnblogs.com/Wananbo/p/6093969.html 运行scrapy时&#xff0c;弹出win32错误&#xff0c;然后用pip install pywin32 不行&#xff0c;实际上是缺少了pypiwin32转载于:https://www.cnblogs.com/tangbinghaochi/p/6593543.html

TL431的用法

TL431是可控精密稳压源。它的输出电压用两个电阻就可以设置从Vref&#xff08;2.5V&#xff09;到36V范围内的任何值。该器件的典型动态阻抗为0.2Ω&#xff0c;在很多应用中用它代替稳压二极管&#xff0c;例如&#xff0c;数字电压表&#xff0c;运放电路&#xff0c;可调压电…