C# 学习笔记(4) 类

面向对象编程主要是为了写出一个通用的代码,屏蔽差异,方便开发大型项目。类就是面向对象编程的核心之一。和C语言的结构体相比,结构体拥有的功能,类统统都有,除此之外,类还有许多新特性。

类的构成

[其他修饰符] [访问修饰符] class 类名
{字段;属性;方法;构造函数;析构函数;
}

字段

存放类的私有数据,通常只能被类的属性访问。

属性

保护字段,对字段的赋值和取值进行限定。例如有一个学生类,类中有成绩这个字段,类外只可以获取到成绩的等级–优良中差,这时就可以给这个字段加上一个属性,通过访问属性间接访问成绩字段。为了保证程序封装性,类外一般是不允许访问类内的字段的,一般字段和属性是成对出现的。

    public class Student{int _Score;    //成绩字段public string Score   //成绩属性{get { if(_Score < 60){return "差";}else if(_Score < 80){return "中";}else if(_Score < 90){return "良";}else{return "优";}}set { _Score = int.Parse(value); }}}

属性的本质就是两个方法,一个叫get()一个叫set()。
既有get()也有set()我们诚之为可读可写属性。
只有get()没有set()我们称之为只读属性
没有get()只有set()我们称之为只写属性

方法

方法也就是C语言中的函数,面向对象里面叫方法。

  • C语言中,函数名字不能重复,而C#中允许方法名重复(方法重载),不过要求方法参数要么个数不同,要么类型不同。
    public class Student{int _Score;    //成绩字段public string Score   //成绩属性{get { if(_Score < 60){return "差";}else if(_Score < 80){return "中";}else if(_Score < 90){return "良";}else{return "优";}}set { _Score = int.Parse(value); }}//三个方法名字都叫Learn 方法1、2参数个数相同但是类型不同 方法1、3参数类型相同但是个数不同public void Learn(string subject, int time){Console.WriteLine("学习{0}科目, 学习时长:{1}", subject, time);}public void Learn(string subject1, string subject2){Console.WriteLine("学习{0}科目, 学习{1}科目", subject1, subject2);}public void Learn(string subject, int time, float ratio){Console.WriteLine("学习{0}科目, 学习时长:{1}, 学习效率:{2}", subject, time, ratio);}}

构造函数

作用:帮助我们初始化对象(给对象的属性赋值)
构造函数是一个特殊的方法:
1)、构造函数没有返回值,连void也不能写。
2)、构造函数的名称必须跟类名一样。

  • 创建对象的时候会执行构造函数
  • 构造函数是可以有重载的。

类当中会有一个默认的无参数的构造函数,当你写一个新的构造函数之后,不管是有参数的还是
无参数的,那个默认的无参数的构造函数都被干掉了。

    public class Student{int _Score;    //成绩字段public string Score   //成绩属性{get { if(_Score < 60){return "差";}else if(_Score < 80){return "中";}else if(_Score < 90){return "良";}else{return "优";}}set { _Score = int.Parse(value); }}//默认构造函数 也可以自己添加参数和方法体public Student(){}}

析构函数

作用:析构函数(destructor) 与构造函数相反,当对象脱离其作用域时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。

  • 区别于构造函数。它不能带任何参数,也没有返回值(包括void类型)。只能有一个析构函数,不能重载。如果用户没有编写析构函数,编译系统会自动生成一个缺省的析构函数,它也不进行任何操作。
    析构函数是一个特殊的方法:
    1)、析构函数不能被继承或重载。
    2)、析构函数不能被用户调用。
    3)、析构函数不能带修饰或参数。
    4)、如果没有析构函数系统会自动生成一个空的析构函数,对象使用的资源将有由GC Garbage Collection垃圾回收器回收(如果用户想要自己释放资源,则要自行 编写析构函数)
    public class Student{int _Score;    //成绩字段public string Score   //成绩属性{get { if(_Score < 60){return "差";}else if(_Score < 80){return "中";}else if(_Score < 90){return "良";}else{return "优";}}set { _Score = int.Parse(value); }}//默认构造函数 也可以自己添加参数和方法体public Student(){}//默认析构函数 也可以自己添加方法体~Student(){}}

修饰符

访问修饰符

  • public :公开的公共的
  • private:私有的,只能在当前类的内部访问
  • protected:受保护的,只能在当前类的内部以及该类的子类中访问。
  • internal:只能在当前项目中访问。在同一个项目中,internal和public的权限是一样。
  • protected internal:protected+internal

1)、能够修饰类的访问修饰符只有两个:public、internal。
2)、在继承中,当可访问性不一致时,
子类的访问权限不能高于父类的访问权限,否则会暴漏父类的成员。

其他修饰符

  • partial部分类

    在合作开发时,一个类可能由多个人写,每个人都写在不同的文件中,这时可以使用partial来修饰类,表示当前只是该类的一部分。

  • sealed密封类

    丁克,不能被继承

  • static

静态和非静态的区别
1)、在非静态类中,既可以有实例成员,也可以有静态成员。
2)、在调用实例成员的时候,需要使用对象名.实例成员;
在调用静态成员的时候,需要使用类名.静态成员名;
总结:静态成员必须使用类名去调用,而实例成员使用对象名调用。
静态函数中,只能访问静态成员,不允许访问实例成员。
实例函数中,既可以使用静态成员,也可以使用实例成员。
静态类中只允许有静态成员,不允许出现实例成员。

使用:
1)、如果你想要你的类当做一个"工具类"去使用,这个时候可以考虑将类写成静态的。
2)、静态类在整个项目中资源共享。
只有在程序全部结束之后,静态类才会释放资源。

# C# 学习笔记(4) 类相关推荐

  1. ASM学习笔记2 - 类的创建和修改 —— ClassWriter的综合应用

    ASM学习笔记2 - 类的创建和修改 -- ClassWriter的综合应用 上回我们说到,通过使用ClassVisitor和ClassReader,我们能够分析已经存在的类.这一节中,我们将使用Cl ...

  2. Python学习笔记 (类与对象)

    Python学习笔记 (类与对象) 1.类与对象 面向对象编程语言类: 一个模板, (人类)-是一个抽象的, 没有实体的对象: (eg: 张三, 李四) 属性: (表示这类东西的特征, 眼睛, 嘴巴, ...

  3. Machine Learning A-Z学习笔记12-分类模型性能评级及选择

    Machine Learning A-Z学习笔记12-分类模型性能评级及选择 1.简单原理 一般认为假阴性比假阳性更严重,如核酸检测 用混淆矩阵表示如下图 准确率驳论(Accuracy Paradox ...

  4. JAVA学习笔记(类的学习)

    JAVA学习笔记(类的学习) 类声明和类体 构造方法和对象创建 对象的引用和实体 成员变量 方法 方法重载 关键字this 包 import语句 访问权限 对象数组 反编译和文档生成器 JAR文件 1 ...

  5. python面向对象编程72讲_2020-07-22 Python学习笔记27类和面向对象编程

    一些关于自己学习Python的经历的内容,遇到的问题和思考等,方便以后查询和复习. 声明:本人学习是在扇贝编程通过网络学习的,相关的知识.案例来源于扇贝编程.如果使用请说明来源. 第27关 类与面向对 ...

  6. 设计模式学习笔记1——类与类之间的关系

    1.继承关系 概念 继承又分为2种方式,一种叫实现继承,一种叫接口继承.参见笔记--[2种继承方式学习笔记].(https://blog.csdn.net/yhb1206/article/detail ...

  7. 冰冰学习笔记:类与对象(上)

    欢迎各位大佬光临本文章!!! 还请各位大佬提出宝贵的意见,如发现文章错误请联系冰冰,冰冰一定会虚心接受,及时改正. 本系列文章为冰冰学习编程的学习笔记,如果对您也有帮助,还请各位大佬.帅哥.美女点点支 ...

  8. 冰冰学习笔记:类与对象(下)

    欢迎各位大佬光临本文章!!! 还请各位大佬提出宝贵的意见,如发现文章错误请联系冰冰,冰冰一定会虚心接受,及时改正. 本系列文章为冰冰学习编程的学习笔记,如果对您也有帮助,还请各位大佬.帅哥.美女点点支 ...

  9. Mono源代码学习笔记:Console类(四)

    NullStream 类 (internal class) 下面就是 mcs/class/corlib/System.IO/NullStream.cs: 01: namespace System.IO ...

  10. 初探swift语言的学习笔记四(类对象,函数)

    2019独角兽企业重金招聘Python工程师标准>>> swift扩展了很多功能和属性,有些也比较奇P.只有慢慢学习,通过经验慢慢总结了. 下面将初步学习一下类的写法. 码工,最大爱 ...

最新文章

  1. shell 读取配置文件
  2. jq 创建与添加节点
  3. 双系统不能引导双系统
  4. 腾讯内部人士爆与老干妈合作多个环节有漏洞 却没人察觉
  5. Nginx 0.8.5版本access.log日志分析shell命令
  6. [LeetCode] Multiply Strings 解题报告
  7. 基于单链表的生产者消费者问题
  8. 基于java的程序启动出错Could not create the Java virtual machine
  9. Web浏览器调试工具firebug
  10. 将分支指针移动到不同的提交而不签出
  11. 课程设计——企业网络项目搭建(上)
  12. php 类里面 session,session类方法
  13. android计算器实现sin功能,简单实现Android计算器功能
  14. postsql时间计算
  15. 【VRP问题】基于狼群算法WPA求解带时间窗车辆路径规划问题(VRPTW)matlab源码
  16. 7-20 打印九九口诀表 (15分) 下面是一个完整的下三角九九口诀表: 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4
  17. 【无标题】西门子smart触摸屏连接1200PLC
  18. [2019红帽杯]easyRE1题解
  19. 雇佣兵的战斗力最大可以到达多少
  20. 记一次内网jenkins自动发布血泪史

热门文章

  1. windows下用GCC编译DLL
  2. 19日零时起降低成品油价格 燃油税元旦起开征
  3. MTK 平台上查询当前使用的摄像头模组及所支持预览分辨率
  4. [2018.12.9]BZOJ2153 设计铁路
  5. C++ algorithm库中的几个常用函数(swap,reverse,sort)
  6. leetcode-169.求众数
  7. Java基础语法(数组)
  8. 实战CentOS系统部署Hadoop集群服务
  9. java JFrame修改左上角的图片
  10. JAVA 基本运算符(摘)