C# 高级编程04----类
一、类和结构:
相同点:
1. 类和结构都是创建对象的模板,包含数据成员和方法成员
不同点:
1.在内存中的存储方式:
1)类是存储在堆内存上的引用类型,结构是存储在栈内存的值类型
2)结构不支持继承
二、类的成员:
类的成员包含:数据成员和函数成员
1.数据成员:
数据成员包含:字段、常量、事件成员
2.函数成员:
方法参数传递:
1) 除非特别指定,所有的引用类型都是通过引用传递,所有的值类型都是通过值来传递。引用类型作为参数传递的时候,传递的是引用,修改会影响原始数据;值引用传递的数据的副本,不会影响原有的数据。
2)ref 参数:可通过ref参数将值参数通过引用传递给方法,目的是为了在值传递时改变原有数据
3)out参数:out参数可以使一个方法输出多个值,同时在参数前加上out前缀后,传递给方法的变量可以不被初始化。
4)可选参数:可选参数必须有默认值,并且必须是方法定义的最后的参数
属性访问器:
get/set访问器:
1)get访问器不带任何参数,必须返回属性声明的类型。set默认会有一个value参数
2)可以为get设置共有的属性访问器(public),为set设置私有或受保护的访问器
三、弱引用
当实例化一个类或结构后,只要有代码引用它,就形成了强引用。如果需要使用弱引用可以通过如下代码来创建
WeakReference mathReference = new WeakReference(new MathTest());
MathTest math;
if(mathReference.IsAlive){
math = mathReference.Target as MathTest;
}
四、部分类
使用partial关键字可以把类、结构、接口放在多个文件中。
五、继承
1.C#中不支持多重继承,但允许实现多个接口。C# 不支持私有继承,因此基类上没有public或private限定符
2.在继承中,如果将基类的函数声明为virtual,可以在任何派生类中重写该函数。在函数调用的时候,会调用该类对象的合适的方法。
3.C#中,函数默认情况下都不是虚函数,除非显式声明为virtual。而在Java中,所有函数都是虚拟的
4.若需要隐藏基类的某个方法,可使用new关键字
5.抽象类和抽象方法
1)使用abstract关键字,可以将一个类或方法声明为抽象类或抽象方法
2)抽象类不能实例化,抽象函数不能直接实现,必须在费抽象的派生类中重写
6.密封类和密封方法(断子绝孙类/方法)
1)使用sealed关键字,可以将一个类或方法声明为密封类/方法
2)密封类不能被继承,密封方法不能被重写。string就是一个密封类
C# 高级编程04----类的更多相关文章
- 第三章:Python高级编程-深入类和对象
第三章:Python高级编程-深入类和对象 Python3高级核心技术97讲 笔记 3.1 鸭子类型和多态 """ 当看到一直鸟走起来像鸭子.游泳起来像鸭子.叫起来像鸭子 ...
- C++面向对象高级编程(五)类与类之间的关系
技术在于交流.沟通,转载请注明出处并保持作品的完整性. 本节主要介绍一下类与类之间的关系,也就是面向对象编程先介绍两个术语 Object Oriented Programming OOP面向对象编 ...
- Linux高级编程--04.GDB调试程序(查看数据)
查看栈信息 当程序被停住了,你需要做的第一件事就是查看程序是在哪里停住的.当你的程序调用了一个函数,函数的地址,函数参数,函数内的局部变量都会被压入"栈"(Stack)中.你可以用 ...
- Linux高级编程--04.GDB调试程序(设置断点)
调试已运行的程序 在UNIX下用ps查看正在运行的程序的PID(进程ID),然后用gdb PID格式挂接正在运行的程序. 先用gdb 关联上源代码,并进行gdb,在gdb中用attach命令来挂接进程 ...
- obj-c编程04:类的继承
这第4篇内容比較少,主要说的是obj-c中的类的继承,须要说明的是我仅仅是写了继承中最简单的形式,假设所有展开来说,那就多了去了!关键是如今肚子里还没装够墨水,没法展开啊! 以下的代码中,我们写了2个 ...
- Python实用笔记 (26)面向对象高级编程——定制类
Python的class允许定义许多定制方法,可以让我们非常方便地生成特定的类.以下是集中常见的定制方法: 怎么才能打印得好看呢?只需要定义好__str__()方法,返回一个好看的字符串就可以了: _ ...
- Linux高级编程--04.GDB调试程序(入门概述)
GDB概述 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试 ...
- C++之高级编程20170914
/*************************************************************************************************** ...
- python高级编程之元类(第3部分结束)
# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' #元编程 #new-style类带来了一种能力,通过2个特殊方法(_ ...
- C# 6 与 .NET Core 1.0 高级编程 - 40 ASP.NET Core(下)
译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 40 章 ASP.NET Core(下)),不对的地方欢迎指出与交流. 章节出自<Professiona ...
随机推荐
- java的clone()方法
什么是"clone"? 在实际编程过程中,我们常常要遇到这种情况:有一个对象A,在某一时刻A中已经包含了一些有效值,此时可能 会需要一个和A完全相同新对象B,并且此后对B任何改动都 ...
- tomcat server.xml结构
所有xml文件使用的文件头 <?xml version='1.0' encoding='utf-8'?> 2 <Server port="8005" shutdo ...
- sqlplus命令行登录oracle数据库的N种方法盘点
欢迎访问我的个人博客IT废柴,本文永久链接移至:sqlplus命令行登录oracle数据库的N种方法盘点 sqlplus有几种登陆方式Oracle数据库, 比如: 1.以操作系统权限认证的oracle ...
- Ffmpeg使用
ffmpeg官网 刚开始安装的推荐博客|--利用FFmpeg 开发音视频流:一.二.三 1.分辨率码率 主要视频格式与码率: 分辨率 200p——对应的码率是256kpbs,也就是说,一分钟需要流量1 ...
- 上传图片,通过node服务器存储在指定目录
最近做毕设,需要上传图片,因为在本地服务器运行,所以想着前端上传后,通过node服务器接收图片,存储在指定的目录下. 一.前端实现 1.前端的页面和上传图片是利用element-ui组件实现的,&qu ...
- [Luogu 4245] 任意模数NTT
Description 给定 \(2\) 个多项式 \(F(x), G(x)\),请求出 \(F(x) * G(x)\). 系数对 \(p\) 取模,且不保证 \(p\) 可以分解成 \(p = a ...
- DP的优化总结
一.预备知识 \(tD/eD\) 问题:状态 t 维,决策 e 维.时间复杂度\(O(n^{e+t})\). 四边形不等式: 称代价函数 w 满足凸四边形不等式,当:\(w(a,c)+w(b,d)\l ...
- 远离go path,弃用go get,使用go mod 进行go语言的学习
标题说的是go语言的学习,因为我也没做过开发 文章要解决的仅仅是一个问题 当你使用go get 无论如何get不到所需的包的问题 第一步就是下载goland 新手极其推荐goland,因为直接使用gl ...
- 文件上传XSS引发的安全问题
文件上传xss,一般都是上传html文件导致存储或者反射xss 一般后缀是html,之前疏忽了,没怎么考虑文件上传xss 如果没有 验证文件内容,却验证了后缀的情况下,使用: htm后缀: 测试代码: ...
- B树和B+树的插入、删除图文详解(good)
B树和B+树的插入.删除图文详解 1. B树 1. B树的定义 B树也称B-树,它是一颗多路平衡查找树.我们描述一颗B树时需要指定它的阶数,阶数表示了一个结点最多有多少个孩子结点,一般用字母m表示阶数 ...