【C#】001.类和对象
文章目录
- 类和对象
- 一、各种类
- sealed 封闭类和封闭方法
- 二、类成员
- 静态成员
- 成员常量
- 字段和属性区别
- 三、构造函数
- 对象初始化器
- 无参构造函数和有参构造函数
- 调用构造函数顺序
- 隐式或显式调用基类构造函数
- 静态构造函数
- 四、析构函数
类和对象
- 类是一种数据结构(data structure)
- 类是一种数据类型
- 类代表现实世界中的 “种类”
类的构成
[其他修饰符] [访问修饰符] class 类名
{字段;属性;方法;构造函数;析构函数;
}
一、各种类
# 抽象类abstract class AbClass(){}只能作为被继承的类,不能创建实例
# 静态类static public class MyMath(){}所有成员必须为静态的不能被继承
# 密封类sealed class MyClass(){}密封类不能被继承,最小的子类
sealed 封闭类和封闭方法
- 不希望被继承,封闭方法不希望被重写
- 像java的final
- 让派生类的子类不能重写派生类的方法
# 派生类重写的基类方法,又不想之类重写
sealed override public void Speak(){}
二、类成员
一个类可以包含哪些成员
字段(field)一般是private静态成员
常量 成员常量
方法
属性(property)一般是public属性是字段的自然扩展
构造函数
析构函数
索引器(accessors)
事件
静态成员
静态成员
- 静态字段的改变:被类所有实例共享,都访问同一个内存位置,同时改变
- 静态成员的生命周期:类没有实例,也存在静态成员,并且可以访问
- 静态函数成员的访问:只能访问静态成员,不能访问实例成员
# 静态成员举例
static int Mem2 =1;
访问静态成员
# 从外部访问 通过 类名.静态成员名
staitc int Mem2=1;
Class1.Mem2=5;# 从内部访问 直接用字段名
Mem2 = 5;
静态成员的访问
成员常量
- const int IntVal =100;//不能在声明后赋值
- 常量没有自己的存储位置,只是编译时被替换
- 不能把常量静态化,不能声明static
字段和属性区别
- 字段主要是为类的内部做数据交互使用,字段一般是private
- 属性一般是向外提供数据,主要用来描述对象的静态特征,属性一般是public
- 属性是字段的自然扩展
- 一般来说属性名是变量名的首字母大写
- 属性的作用是对字段进行赋值时加以限制
- 属性一般是向外提供数据
- 属性的本质就是两个方法,一个叫get()一个叫set()
属性出现的原因
在C#中,对于一些公有字段我们可以无限制的访问
我们可能错误的修改了字段中的值
使得数据不准确,于是就出现了属性
属性中的get和set解决了访问字段时候出现的问题
属性的分类
属性中有set和get
set负责属性的写入工作
get负责属性的读取工作
只读属性、既可读又可写属性,还有只写属性
属性的封装声明和使用
# 属性的封装声明
这段代码中声明了name字段和Name属性,一般来说属性名是变量名的首字母大写
public class Employee
{//字段private string name;//属性public string Name {get { return name; }set { name = value; }}
}
# 封装限制
public class Employee
{//字段private byte age;//属性public byte Age {get { return age; }set {if(value >= 18 && value<=60)age = value;}}
}
# 调用代码
class TestEmployee
{static void Main(){Employee.NumberOfEmployees = 107;Employee e1 = new Employee();//错误,name字段为private私有字段e1.name = "Claude Vige";//正确,Name属性通过set方法对name字段赋值e1.Name = "Claude Vige";//打印输出e1的姓名,通过Name属性的get方法返回name的值System.Console.WriteLine("Employee name: {0}", e1.Name);}
}
三、构造函数
- 构造函数用于初始化类实例
- 外部创建类,需要构造函数声明public
- 构造函数名和类名相同
- 不能有返回值,public MyClass()
- 构造函数为了给对象赋值初始化
- 隐式默认构造函数、带参构造函数、重载构造函数、静态构造函数、析构函数
对象初始化器
Child a = new Child {Age = 5};
无参构造函数和有参构造函数
无参构造函数为属性赋值
有参构造函数为属性赋值
调用构造函数顺序
1.先实例化基类成员
2.调用基类构造函数
3.调用派生类构造函数
隐式或显式调用基类构造函数
创建对象的时候,一定会调用基类构造函数,只不过是隐式还是显式
静态构造函数
静态构造函数只会被执行一次
在创建第一个实例或引用任何静态成员之前
# 使用原因是:
在第一次使用类之前,用静态构造函数来初始化类
对字段或属性进行一系列的操作进行初始化
而不希望每次实例化类的时候改变他
用静态构造函数比较方便class SimpleClass
{// Static constructorstatic SimpleClass(){//}
}
四、析构函数
出现原因
类中调用了系统的一些底层资源去消耗内存
当GC去收回对象时,它可能还并不知道该对象
还占用着系统资源,那么也就不会去释放
这时就需要在析构器中手动释放这些资源
【C#】001.类和对象相关推荐
- java编写教师类输出_Java类和对象的区别和联系,超简单易懂!
在面向对象的编程语言中,类和对象必然是最核心的特性之一.本文主要介绍Java中的类和对象. 示例 以班级成员为例,班上有小红.小明.小李,还有王老师.张老师和魏老师,我们认为他们都属于"人类 ...
- Android中使用Intent进行窗体切换,并且传值和自定义类的对象详解
在Android中,Intent对象负责各个Activity窗口之间的切换,同时他更担负起数据传输重任. 一般情况下,使用Intent对象进行简单窗口切换的代码如下: Intent i=new Int ...
- python代码学习——类与对象提升(继承、超继承,类的例题,魔术方法)
python代码学习--类与对象提升 继承 继承的特殊属性: 代码示例 方法的重写和覆盖(overrrid) 总结 超继承 继承中的初始化 多继承 例题 类的魔术方法 哈希(hash)和eq方法 bo ...
- 第四部分—C++核心编程_4. 类和对象
4.1 类和对象的基本概念 4.1.1 C和C++中struct区别 c语言struct中只有变量 c++语言struct中既有变量,也有函数 4.1.2 类的封装 我们编写程序的目的是为了解决现实中 ...
- C++ 笔记(18)— 类和对象(this 指针、指向类的指针、类静态成员变量和函数)
1. this 指针 在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址. this 指针是所有成员函数的隐含参数.因此,在成员函数内部,它可以用来指向调用对象. 友元函数没有 thi ...
- C++ 笔记(16)— 类和对象(类定义、类实例对象定义、访问类成员、类成员函数、类 public/private/protected 成员、类对象引用和指针)
1. 类的定义 类定义是以关键字 class 开头,后跟类的名称.并在它后面依次包含类名,一组放在 {} 内的成员属性和成员函数,以及结尾的分号. 类声明将类本身及其属性告诉编译器.类声明本身并不能改 ...
- C02-程序设计基础提高班(C++)第9周上机任务-类和对象
第9周:阅读教材第8章(p231-262),主要内容是类和对象,学会定义类和对象解决问题,完成第9周上机任务: (回到C02-程序设计基础提高班(C++)学习安排) 实践任务: [任务1]阅读.运行下 ...
- 函数返回类的对象与拷贝构造函数
C++中,如果我们在一个函数中,定义了一个类的对象,然后返回这个对象,在main函数中用一个对象去接受这个返回的对象的时候,这里面参与的函数调用大家可能不熟悉,这里通过程序和注释的方式给大家讲解一下. ...
- ZJU-java进阶笔记 第一、二周(类与对象,对象交互)
对象变量是对象的管理者,而非所有者 VendingMachine vm = new VendingMachine(); this指代当前对象 成员函数可以直接(不需要点运算符)调用本类的其他成员函数 ...
最新文章
- 深浅复制的的理解与区别
- 聊一聊ZooKeeper的顺序一致性
- AI 世界的硬核之战,Tengine 凭什么成为最受开发者欢迎的主流框架?
- SQL SERVER 2008的元数据视图
- Windows7_x64下编译64位ffmpeg
- vue 数字变星号 过滤器_Vue自定义过滤器格式化数字三位加一逗号
- 网络逻辑结构设计的内容不包括( )。【最全!最详细解析!】
- places365_Google Places API网络服务示例
- 非常好用的离线地图APP
- ie select option css,ie浏览器不支持select option italic
- bat putty shell 连携
- 洛谷1146 硬币翻转
- c语言中位数怎么求,C计算中位数参考
- 双硬盘安装win10和linux双系统,双硬盘安装win10+ubuntu18心得
- ArcGIS Pro教程 | 1#数据准备
- 计算机毕业设计Java爱馨敬老院网站(源码+系统+mysql数据库+lw文档)
- 新研究评估Masimo SedLine(R)脑功能监护仪能否预测心跳骤停后ICU患者的神经系统转归和长期生存
- 一文详解四种经典限流算法,面试必备。
- 底部孕线形态有哪些?底部孕线形态特征是什么?
- IDL 文本编码、代码补全快捷方式、IDL doc、格式器、行号显示设置