文章目录

  • 类和对象
    • 一、各种类
      • 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.类和对象相关推荐

  1. java编写教师类输出_Java类和对象的区别和联系,超简单易懂!

    在面向对象的编程语言中,类和对象必然是最核心的特性之一.本文主要介绍Java中的类和对象. 示例 以班级成员为例,班上有小红.小明.小李,还有王老师.张老师和魏老师,我们认为他们都属于"人类 ...

  2. Android中使用Intent进行窗体切换,并且传值和自定义类的对象详解

    在Android中,Intent对象负责各个Activity窗口之间的切换,同时他更担负起数据传输重任. 一般情况下,使用Intent对象进行简单窗口切换的代码如下: Intent i=new Int ...

  3. python代码学习——类与对象提升(继承、超继承,类的例题,魔术方法)

    python代码学习--类与对象提升 继承 继承的特殊属性: 代码示例 方法的重写和覆盖(overrrid) 总结 超继承 继承中的初始化 多继承 例题 类的魔术方法 哈希(hash)和eq方法 bo ...

  4. 第四部分—C++核心编程_4. 类和对象

    4.1 类和对象的基本概念 4.1.1 C和C++中struct区别 c语言struct中只有变量 c++语言struct中既有变量,也有函数 4.1.2 类的封装 我们编写程序的目的是为了解决现实中 ...

  5. C++ 笔记(18)— 类和对象(this 指针、指向类的指针、类静态成员变量和函数)

    1. this 指针 在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址. this 指针是所有成员函数的隐含参数.因此,在成员函数内部,它可以用来指向调用对象. 友元函数没有 thi ...

  6. C++ 笔记(16)— 类和对象(类定义、类实例对象定义、访问类成员、类成员函数、类 public/private/protected 成员、类对象引用和指针)

    1. 类的定义 类定义是以关键字 class 开头,后跟类的名称.并在它后面依次包含类名,一组放在 {} 内的成员属性和成员函数,以及结尾的分号. 类声明将类本身及其属性告诉编译器.类声明本身并不能改 ...

  7. C02-程序设计基础提高班(C++)第9周上机任务-类和对象

    第9周:阅读教材第8章(p231-262),主要内容是类和对象,学会定义类和对象解决问题,完成第9周上机任务: (回到C02-程序设计基础提高班(C++)学习安排) 实践任务: [任务1]阅读.运行下 ...

  8. 函数返回类的对象与拷贝构造函数

    C++中,如果我们在一个函数中,定义了一个类的对象,然后返回这个对象,在main函数中用一个对象去接受这个返回的对象的时候,这里面参与的函数调用大家可能不熟悉,这里通过程序和注释的方式给大家讲解一下. ...

  9. ZJU-java进阶笔记 第一、二周(类与对象,对象交互)

    对象变量是对象的管理者,而非所有者 VendingMachine vm = new VendingMachine(); this指代当前对象 成员函数可以直接(不需要点运算符)调用本类的其他成员函数 ...

最新文章

  1. 深浅复制的的理解与区别
  2. 聊一聊ZooKeeper的顺序一致性
  3. AI 世界的硬核之战,Tengine 凭什么成为最受开发者欢迎的主流框架?
  4. SQL SERVER 2008的元数据视图
  5. Windows7_x64下编译64位ffmpeg
  6. vue 数字变星号 过滤器_Vue自定义过滤器格式化数字三位加一逗号
  7. 网络逻辑结构设计的内容不包括( )。【最全!最详细解析!】
  8. places365_Google Places API网络服务示例
  9. 非常好用的离线地图APP
  10. ie select option css,ie浏览器不支持select option italic
  11. bat putty shell 连携
  12. 洛谷1146 硬币翻转
  13. c语言中位数怎么求,C计算中位数参考
  14. 双硬盘安装win10和linux双系统,双硬盘安装win10+ubuntu18心得
  15. ArcGIS Pro教程 | 1#数据准备
  16. 计算机毕业设计Java爱馨敬老院网站(源码+系统+mysql数据库+lw文档)
  17. 新研究评估Masimo SedLine(R)脑功能监护仪能否预测心跳骤停后ICU患者的神经系统转归和长期生存
  18. 一文详解四种经典限流算法,面试必备。
  19. 底部孕线形态有哪些?底部孕线形态特征是什么?
  20. IDL 文本编码、代码补全快捷方式、IDL doc、格式器、行号显示设置

热门文章

  1. 从Windows 10共享文件夹给Docker虚拟机中的Docker的神奇bug
  2. 《unix环境高级编程》--- 信号
  3. 封魔录聊天窗口默认文本功能
  4. ROS-Academy-for-Beginners依赖包报错问题
  5. 新闻分类大赛赛题分析
  6. 【小米】【Audio】玩《植物大战僵尸》进游戏后,锁屏,扬声器过几分钟有杂音
  7. 【兼容性】js 浏览器兼容问题处理方式
  8. Android设备唯一标识(终极方案!)
  9. 2-HTML多媒体与嵌入
  10. 走进Linux的世界,看这篇文章就够了