C#-封装(七)
封装概念
C#是面向对象的一门语言,面向对象的语言有三大特性:封装、继承、多态。而封装可以实现一个自定义的类,从而定义新的对象
封装是将一个或多个项目集合在一个单元中,这个单元称之为类。这样可以防止对实现细节的访问
C#封装可以根据需要通过修饰符实现类成员的范围和可见性。访问修饰符有:
public:公共的,任何地方都可以访问,但是需要引用命名空间
private:私有的,类的内部才可以访问
internal:内部的,默认的,程序集中可以访问,程序集就是命名空间
protected:被保护的,类的内部和类的父类和子类中可以访问
Protected internal :protected和internal的并集,符合任意一条都可以访问
示例
观察如下代码
namespace Student
{
class Student
{
public string _code;
public string _sex;
public int _age;
} class StudentAction
{
static void Main(string[] args) {
Student XiaoMing = new Student();
XiaoMing._code = "";
XiaoMing._sex = "男";
XiaoMing._age = ;
}
}
}
用public修饰的属性,不够安全,成员函数可以直接访问这些变量
用Private 修饰符则允许一个类将其成员变量和成员函数对其他的函数和对象进行隐藏。只有同一个类中的函数可以访问它的私有成员。
在VS中快速封装的快捷键为:Ctrl+R+E,如下图:
使用prvite后,则函数将不能再对其成员变量访问,如下图:
需要对外提供一个接口,代码如下:
namespace StudentSpace
{
class Student
{
private string _code; //成员变量
private string _sex;
private int _age; public string Code //进行封装的时候要用public,保证类外可以使用
{
get
{
return _code; //成员属性
} //属性一般用小写字母表示,但是封装的时候首字符要大写 set
{
_code = value;
}
} public string Sex
{
get
{
return _sex; //成员属性
}
set
{
_sex = value;
}
} public int Age
{
get
{
return _age; //成员属性
} set
{
_age = value;
}
}
}
}
主函数调用:
//主函数中调用
class StudentAction
{
static void Main(string[] args)
{
Student XiaoMing = new Student();
XiaoMing.Code = "";
XiaoMing.Sex = "男";
XiaoMing.Age = ; Console.WriteLine(XiaoMing.Code);
Console.WriteLine(XiaoMing.Sex);
Console.WriteLine(XiaoMing.Age);
}
}
主函数执行结果如下:
遇到的问题
在此期间,笔者将namespace与class的名称都写成了Student,导致在主函数中调用时直接写Student报错误
如果是在同一个namespace封装函数并且调用函数没有问题
不在同一个namespace程序就会认为调用的是namespace而不是class,所以报错,修改方法有两种:
1、修改下namespace使两者的命名不一致;
2、使用namespace.class调用,将class名称跟在namespace名称后面
封装中的set
在封装中get 是读取即属性取值,set 是赋值即属性赋值,也就是主函数不能调用_code,而能调用的是Code,但赋值的却是_code
在封装过程中对于学生的性别要有特殊处理,学生的性别要么是男要么是女,其他值为非法值,不能允许非法值输入
代码如下:
public string Sex
{
get
{
return _sex; //成员属性
}
set
{
if (value == "男" || value == "女")
_sex = value;
else
_sex = "性别只能是男或女";
}
}
执行主函数:
C#-封装(七)的更多相关文章
- angular封装七牛云图片上传,解决同一页面多个上传按钮分别上传
step1:引入文件 引入Plupload *该SDK上传功能集于Plupload插件封装,所以需要下载Plupload; plupload.dev.js 引入qiniu.js为了简便,当时直接从官网 ...
- StackExchange.Redis帮助类解决方案RedisRepository封装(基础配置)
本文版权归博客园和作者吴双本人共同所有,转载和爬虫,请注明原文地址.http://www.cnblogs.com/tdws/p/5815735.html 写在前面 这不是教程,分享而已,也欢迎园友们多 ...
- StackExchange.Redis帮助类解决方案RedisRepository封装(字符串类型数据操作)
本文版权归博客园和作者本人共同所有,转载和爬虫请注明原文链接 http://www.cnblogs.com/tdws/tag/NoSql/ 目录 一.基础配置封装 二.String字符串类型数据操作封 ...
- 孟老板 BaseAdapter封装(五) ListAdapter
BaseAdapter封装(一) 简单封装 BaseAdapter封装(二) Header,footer BaseAdapter封装(三) 空数据占位图 BaseAdapter封装(四) PageHe ...
- 孟老板 BaseAdapter封装 (一) 简单封装
BaseAdapter封装(一) 简单封装 BaseAdapter封装(二) Header,footer BaseAdapter封装(三) 空数据占位图 BaseAdapter封装(四) PageHe ...
- 孟老板 BaseAdapter封装 (二) Healer,footer
BaseAdapter封装(一) 简单封装 BaseAdapter封装(二) Header,footer BaseAdapter封装(三) 空数据占位图 BaseAdapter封装(四) PageHe ...
- 孟老板 BaseAdapter封装 (三) 空数据占位图
BaseAdapter封装(一) 简单封装 BaseAdapter封装(二) Header,footer BaseAdapter封装(三) 空数据占位图 BaseAdapter封装(四) PageHe ...
- 孟老板 BaseAdapter封装(四) PageHelper
BaseAdapter封装(一) 简单封装 BaseAdapter封装(二) Header,footer BaseAdapter封装(三) 空数据占位图 BaseAdapter封装(四) PageHe ...
- 无需写try/catch,也能正常处理异常 (转)
原文地址: http://www.cnblogs.com/artech/archive/2012/10/28/automatic-exception-handling-aspnet.html 对于企业 ...
- 继承(JAVA)
继承是面向对象最显著的一个特性.继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力. 一.继承的基本语法: 在Java语言中,用extends关键字表示一个类继承了另 ...
随机推荐
- Spring系列之DI的原理及手动实现
目录 Spring系列之IOC的原理及手动实现 Spring系列之DI的原理及手动实现 前言 在上一章中,我们介绍和简单实现了容器的部分功能,但是这里还留下了很多的问题.比如我们在构造bean实例的时 ...
- Number(),parseInt(),parseFloat(),Math.round(),Math.floor(),Math.ceil()对比横评
首先,这些处理方法可分为三类. 1,只用来处理数字取整问题的:Math.round(),Math.floor(),Math.ceil(): 2,专门用于把字符串转化成数值:parseInt(),par ...
- [NewLife.XCode]脏数据
NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netstandard,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode. 整个系列教程会大量结合示 ...
- MFC控件第一讲.DC编程
MFC控件第一讲.DC编程 一丶简介 什么是DC,DC有什么用. DC成为设备描述符表. DC的作用就是可以进行绘制. 比如我们的窗口都是绘制出来的. DC可以简单理解为.没一个窗口程序都有一块内存 ...
- 【转载】wifi的两种工作模式
AP:即无线接入点,是一个无线网络的中心节点.通常使用的无线路由器就是一个AP,其它无线终端 可以通过AP相互连接. STA:即无线站点,是一个无线网络的终端.如笔记本电脑.PDA等. 1>工作 ...
- Pytorch1.0入门实战一:LeNet神经网络实现 MNIST手写数字识别
记得第一次接触手写数字识别数据集还在学习TensorFlow,各种sess.run(),头都绕晕了.自从接触pytorch以来,一直想写点什么.曾经在2017年5月,Andrej Karpathy发表 ...
- 最近公共祖先(least common ancestors,LCA)
摘要: 本文主要介绍了解决LCA(最近公共祖先问题)的两种算法,分别是离线Tarjan算法和在线算法,着重展示了在具体题目中的应用细节. 最近公共祖先是指对于一棵有根树T的两个结点u和v,它们的LCA ...
- OJ:自己实现一个简单的 priority_queue
Description 补足程序,使得下面程序输出结果是: 1.8 2.4 3.8 4.9 8.8 #include <iostream> #include <algorithm&g ...
- Oracle 数据库导出数据泵(EXPDP)文件存放的位置
数据泵是服务器端工具,导出的文件是放在数据库所在的服务器上,当然我们知道可以通过directory目录对象来控制.目录对象默认有四个级别,当然是有优先级顺序的,优先级从上往下 1.每个文件单独的指定具 ...
- [日常] DNS解析概述
DNS DomainNameSystem域名系统,根据域名查出IP地址 1.dig命令可以显示整个查询的过程 root@VM-38-204-ubuntu:~# dig www.sopans.com / ...