封装概念
  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#-封装(七)的更多相关文章

  1. angular封装七牛云图片上传,解决同一页面多个上传按钮分别上传

    step1:引入文件 引入Plupload *该SDK上传功能集于Plupload插件封装,所以需要下载Plupload; plupload.dev.js 引入qiniu.js为了简便,当时直接从官网 ...

  2. StackExchange.Redis帮助类解决方案RedisRepository封装(基础配置)

    本文版权归博客园和作者吴双本人共同所有,转载和爬虫,请注明原文地址.http://www.cnblogs.com/tdws/p/5815735.html 写在前面 这不是教程,分享而已,也欢迎园友们多 ...

  3. StackExchange.Redis帮助类解决方案RedisRepository封装(字符串类型数据操作)

    本文版权归博客园和作者本人共同所有,转载和爬虫请注明原文链接 http://www.cnblogs.com/tdws/tag/NoSql/ 目录 一.基础配置封装 二.String字符串类型数据操作封 ...

  4. 孟老板 BaseAdapter封装(五) ListAdapter

    BaseAdapter封装(一) 简单封装 BaseAdapter封装(二) Header,footer BaseAdapter封装(三) 空数据占位图 BaseAdapter封装(四) PageHe ...

  5. 孟老板 BaseAdapter封装 (一) 简单封装

    BaseAdapter封装(一) 简单封装 BaseAdapter封装(二) Header,footer BaseAdapter封装(三) 空数据占位图 BaseAdapter封装(四) PageHe ...

  6. 孟老板 BaseAdapter封装 (二) Healer,footer

    BaseAdapter封装(一) 简单封装 BaseAdapter封装(二) Header,footer BaseAdapter封装(三) 空数据占位图 BaseAdapter封装(四) PageHe ...

  7. 孟老板 BaseAdapter封装 (三) 空数据占位图

    BaseAdapter封装(一) 简单封装 BaseAdapter封装(二) Header,footer BaseAdapter封装(三) 空数据占位图 BaseAdapter封装(四) PageHe ...

  8. 孟老板 BaseAdapter封装(四) PageHelper

    BaseAdapter封装(一) 简单封装 BaseAdapter封装(二) Header,footer BaseAdapter封装(三) 空数据占位图 BaseAdapter封装(四) PageHe ...

  9. 无需写try/catch,也能正常处理异常 (转)

    原文地址: http://www.cnblogs.com/artech/archive/2012/10/28/automatic-exception-handling-aspnet.html 对于企业 ...

  10. 继承(JAVA)

    继承是面向对象最显著的一个特性.继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力. 一.继承的基本语法: 在Java语言中,用extends关键字表示一个类继承了另 ...

随机推荐

  1. 【原创+整理】简述何为调用约定,函数导出名以及extern C

    何为调用约定 调用约定指的是函数在调用时会按照不同规则,翻译成不同的汇编代码.这和参数的压栈顺序和栈的清理方式相关,也就是说不同的调用约定,这些方式会做相应改变.一般编译器是以默认的调用约定编译一份代 ...

  2. 一览js模块化:从CommonJS到ES6

    本文由云+社区发表 模块化是指把一个复杂的系统分解到一个一个的模块. 模块化开发的优点: (1)代码复用,让我们更方便地进行代码管理.同时也便于后面代码的修改和维护. (2)一个单独的文件就是一个模块 ...

  3. HTML语法介绍

    一 基本标签(块级标签和内联标签) <hn>: n的取值范围是1~6; 从大到小. 用来表示标题. <p>: 段落标签. 包裹的内容被换行.并且也上下内容之间有一行空白. &l ...

  4. Jenkins结合.net平台工具之Msbuild

    前面我们讲解了关于Jenkins的一些基本知识,通过这些知识我们可以结合一些其它工具实现更为复杂的任务,本篇我们将介绍如何使用msbuild工具结合Jenkins实现构建一个.net控制台框. 首先我 ...

  5. 解读经典《C#高级编程》第七版 Page79-93.对象和类型.Chapter3

    前言 本篇我们继续讲解本章其余的部分:构造函数.只读字段.匿名类型.结构详解.部分类.静态类.Object类.扩展方法,等. 01 类 构造函数 构造函数是一种特殊的方法: 与类同名 没有返回值,甚至 ...

  6. Hyperledger Fabric链码之一

    什么是链码(Chaincode)? 我们知道区块链有3个发展阶段:区块链1.0,区块链2.0,区块链3.0.其中区块链2.0就是各种区块链平台百花齐放的阶段,区块链2.0最大的特点就是智能合约,我们接 ...

  7. oracle10G/11G官方迅雷下载地址合集

    原文链接:https://blog.csdn.net/zlsunnan/article/details/8058235 ORACLE11GR2 Oracle Database 11g Release ...

  8. 【转】JSP中的JSTL与EL表达式用法及区别

    对于JSTL和EL之间的关系,这个问题对于初学JSP的朋友来说,估计是个问题,下面来详细介绍一下JSTL和EL表达式他们之间的关系,以及JSTL和EL一些相关概念! EL相关概念JSTL一般要配合EL ...

  9. jquery获取checkbox是否选择的值

    //是否被选中验证有选中的设置为true,否设置为false function myCheckbox() { flag += 1; if (flag%2 == 0){ $('#isSelf').att ...

  10. 从零开始学安全(三)●黑客常用的windows端口

    端口可选1-65536 1-1024 预保留端口 留给windows系统服务的 下面是常见的端口对应的服务 1 TCP Port Service Multiplexer 传输控制协议端口服务多路开关选 ...