免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验十二 C#中字段的定义和读写【实验目的】1.掌握类定义和创建对象的方法;2.会为类添加私有字段,用属性封装;【实验准备】一、复习配套教材相关章节的内容;【实验内容】项目一:C#属性的应用。、打个比方我们有个网站,每当有新用户注册的时候,我们需要记录这些用户的信息。创建一个User类来记录用户的注册信息,包括用成员变量(字段)用户名,密码,性别。2、用属性封装3个字段,实现赋值规则用户名只能以字母开头,密码长度不小于6(默认6个1),性别只能是“男”或“女”。3、为User类添加公共的DisplayInfo方法。4、在主方法中让用户注册信息,用User对象记录,然后调用对象的DisplayInfo方法显示注册信息。项目二:C#的调试技巧一个数如果恰好等于它的因子之和,这个数就称为 完数 ,例如6=123。下面是小菜编写的代码,想找出1000以内的所有完数并输出,但小菜的程序得不得正确的结果。请设置断点,调试运行,帮助小菜找到错误,并改正。【总结与体会】阅读下文:我们知道,类成员包括变量和方法。如果希望其他类能够访问成员变量的值,就必须定义成公有的,而将变量设为公有public,那这个成员变量的就可以被任意访问(包括修改,读取),这样不利于数据安全。那怎么办呢?C#通过属性特性读取和写入字段(成员变量),而不直接直接读取和写入,以此来提供对类中字段的保护。属性可用于类内部封装字段。属性是C#面向对象技术中封装性的体现。注意:字段就是类的成员变量,为配合属性而这样称呼的。属性和字段的区别: 属性是逻辑字段;属性是字段的扩展,源于字段;属性并不占用实际的内存,字段占内存位置及空间。 属性可以被其它类访问,而大部分字段不能直接访问。属性可以对接收的数据范围作限定,而字段不能。(也就是增加了数据的安全性)最直接的说:属性是被“外部使用”,字段是被“内部使用”。要属性这种华而不实的东西做什么?为什么不直接放一个public字段?如:class Cardpublic string Name;而非要做一个private字段+public属性?class Cardprivate string name;public string Nameget return ;set =value;下面我们用代码一步一步来说明为什么要使用属性。using System;/打个比方我们有个网站,每当有新用户注册的时候,我们需要记录这些用户的信息/声明一个User类来记录这些用户的信息class User /姓名,性别 public string name; public string sex;/声明一个类去使用User类class Property static void Main() /实例化一个张三User对象 User zs = new User(); /对其赋值 = 张三; zs.sex = 男; Console.WriteLine(姓名: + + 性别: + zs.sex); 通过编译执行,这段代码正常运行,这个程序乍看一下感觉没有什么问题。但是仔细分析,就会发现:所有字段都是公有的,不利于字段的保护,只要实例化了这个类,都可以修改其中的值。如果性别输入了男女之外的字符,系统是不会识别的。比如把zs.sex =男;改成zs.sex =牛;。运行代码结果肯定张三的性别成牛了.这个时候就不合逻辑了。现在大家可以明显的感觉到User类的封装非常不合理,存在着非常大的缺陷,那么该如何修改呢?这个时候大家马上会想到是不是可以专门声明一个方法给性别赋值呢,好!我们就来实现这个方法。using System;class User public string name; public string sex; /SetSex方法 public void SetSex(string values) if (values = 男 | values = 女) sex = values; else Console.WriteLine(性别只能为“男”或“女”); class Property static void Main() User zs = new User(); = 张三; /直接调用SetSex赋值 zs.SetSex(牛); Console.WriteLine(姓名: + + 性别: + zs.sex); SetSex这个方法乍一看还可以,但是不要忘记name和sex字段还是public属性,我们依然可以直接去调用它,或者说去修改它,一样可以把sex设为“牛”。给类的字段设置为public意味着破坏了类的封装,这样呢会存在潜在的危险。所以呢要设为private,这个时候就分别声明方法去读取和设置这2个字段,修改如下:using System;class User /设为私有的 private string name; private string sex; /设置 public void SetName(string values) name = values; /读取 public string GetName() return name; public void SetSex(string values) if (values = 男 | values = 女) sex = values; else Console.WriteLine(性别只能为“男”或“女”); public string GetSex() return sex; class Property static void Main() User zs = new User(); zs.SetName(张三); zs.SetSex(牛); Console.WriteLine(姓名: + zs.GetName() + 性别: + zs.GetSex(); 大家执行编译下看下效果是没有问题的。现在这个类的设计就比较合理了,我们看name和sex它们是private字段,也就是说在类的外部是不能访问的,这样呢就保证了它的安全性。当用户想给性别字段添加非法字段的时候,SetSex方法内会对这个添加的值进行判断,如果不为男或女,值就不会被添加。通过方法虽然解决了上面的问题,但是每创建一个对象,输入字段值时就必须调用上面
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 河南省驻马店市汝南县双语学校、清华园学校2025-2026 学年九年级上学期1月期末考试道德与法治试卷(含答案)
- 甘肃省酒泉市2025-2026学年高二(上)期末物理试卷(含答案)
- 湖北省恩施市2025-2026学年七年级上学期历史期末考试题卷(含答案)
- 文秘考试试题及答案
- 数控专业实操考试题及答案
- 生理药理学试题及答案
- 《GAT 1031-2012泄漏电缆入侵探测装置通 用技术要求》专题研究报告
- 2026 年初中英语《语态辨析》专题练习与答案 (100 题)
- 2026年深圳中考语文真题变式训练试卷(附答案可下载)
- 2026年深圳中考英语素养培优强化试卷(附答案可下载)
- 2025年-辅导员素质能力大赛笔试题库及答案
- 2026届湖北省宜昌市部分示范高中教学协作体数学高一上期末教学质量检测试题含解析
- 2025年风电运维成本降低路径报告
- 2025年老年娱乐行业艺术教育普及报告
- 2025年抗菌药物合理应用培训考核试题附答案
- 2025年度临床医生个人述职报告
- 2026年烟花爆竹安全生产法律法规知识试题含答案
- 2026年《必背60题》 计算机科学与技术26届考研复试高频面试题包含详细解答
- 2026年无锡商业职业技术学院单招职业技能笔试备考试题带答案解析
- 2026年初二物理寒假作业(1.31-3.1)
- 2025秋人教版七年级上册音乐期末测试卷(三套含答案)
评论
0/150
提交评论