C#之面向对象初步
1、构造函数
定义一个类时,C#默认会实现一个隐式的构造函数,默认的构造函数不接受参数,负责把新对象分配到内存中并确保所有字段数据都设置为正确的默认值。然而,一旦自定义了构造函数,默认构造函数就被自动从类中移除不再有效!
如果希望继续使用自定的构造函数,也需要有默认构造函数为字段创建默认值,则需要显式的重新定义默认构造函数!绝大多数情况下默认构造函数的实现是故意为空。
2、this关键字
this关键字提供对当前类实例的访问。静态成员不能使用this,因为不是实例。
3、静态
静态数据字段:
对所有对象的实例共享。
静态构造函数:
静态构造函数是特殊的构造函数,非常适合于编译时静态数据初始化值未知的情况。
注:1个类只能定义一个静态构造函数。(不可以重载)
静态构造函数不允许使用访问修饰符(public等)且不接受任何参数
无论创建多少对象,其静态构造函数只执行一次。
静态构造函数的执行优先于任何实例级别的构造函数。
静态类:(只包含静态功能的类或结构通常被称为工具类)
静态类不能实例化。
静态类只能包含静态的成员和字段。
防止类被实例化的方法:
- 构造方法私有 即使用private声明
- 将类定义为抽象类
- 静态类(更安全、更简洁)
4、面向对象的三个支柱:封装、继承、多态
封装的作用!
代码重用:
继承:is-a的关系!
包含/委托:has-a的关系(或称聚合)!
例:
class Radio
{
public void power(bool turnon)
{
Console.WriteLine("Radio is {0}",turnon);
}
} class Car
{
//汽车has-a收音机
private Radio myRadio = new Radio();
public void TurnOnRadio(bool onOff)
{
myRadio.power(onOff);
}
}
5、非嵌套类型不能标记为私有
6、自动属性
7、对象初始化语法
// 手动设置每个属性
Point firstPoint = new Point();
firstPoint.X = ;
firstPoint.Y = ;
firstPoint.DisplayStats(); // 或通过自定义构造函数创建对象.
Point anotherPoint = new Point(, );
anotherPoint.DisplayStats(); // 或使用对象初始化语法创建对象.
Point finalPoint = new Point { X = , Y = };
finalPoint.DisplayStats(); // 创建并初始化矩形
Rectangle myRect = new Rectangle
{
TopLeft = new Point { X = , Y = },
BottomRight = new Point { X = , Y = }
};
8、常量(const)与只读字段(readonly)
常量在运行前确定,定义一个常量时即为其赋值,赋值后不能则进行修改。常量是隐式静态的,使用类名前缀使用常量。
只读字段可在运行时确定,但必须在构造函数之中,否则报错。只读字段默认不是静态的。
静态只读字段。运行前确认值的只读字段与常量相似。
class MyMathClass
{
public static readonly double PI;
static MyMathClass()
{ PI = 3.14; }
}
C#之面向对象初步的更多相关文章
- JavaScript面向对象初步认识
一.面向对象初步认识 1.什么是对象? 一句话解释: 万物皆对象 对象是有属性的:用{ }来写入! 2.对象的应用(接口) json 接口简单的说就是后台提供给前端提供数据的,让我们进行渲染! 请求接 ...
- 【java开发】面向对象初步认识与基础概念讲解
简单的把前面的java基础知识讲了,接下来就开始面向对象的旅程了. 对象(Object):简而言之,世界是由对象组成的,一切可见的事物吧 类(class):说白了就是把具有相同的一些特征或是属性归为一 ...
- JAVA面向对象初步知识总结:封装、继承、多态
1.封装 把数据和方法包装进类中,以及具体实现的隐藏,常共同被称作是是封装.其结果是一个同时带有特征和行为的数据类型.所谓具体实现的隐藏是通过访问权限控制实现的.JAVA 子类重写继承的方法时,不可以 ...
- js面向对象初步探究(上) js面向对象的5种写方法
非常长一段时间看网上大神的JS代码特别吃力.那种面向对象的写法方式让人看得云里来雾里去.于是就研究了一下JS面向对象.因为是初学,就将自己在网上找到的资料整理一下,作为记忆. js面向对象的5种写方法 ...
- Python进阶-XIV 面向对象初步
1.面向对象的引入 def Person(*args): ''' 定义一个人 :param args: 人的属性 :return: 人的所有属性的字典 ''' info = {} info['name ...
- 初步学习JAVA面向对象初步认识及面向对象内存分析图举例说明
1. 说到面向对象, 一个绕不开的话题,就是面向过程. 面向过程适合简单.不需要协作的事务. 面向过程 = 分解问题 + 逻辑为先 = 先细节,再整体. 对比面向过程, 面向对象是模块化的, 当我们思 ...
- cpp 面向对象初步探索
需求 尝试定义一个complex(复数类) 简略实现 headers/complex.h #ifndef __COMPLEX__ #define __COMPLEX__ class complex { ...
- 面向对象第一次练手-------ArrayList集合、类、对象、冒泡排序、类型转换
思维转不过弯儿来 怎么做都是错 哪怕差一个()就成功的事情,也是千差万别 忽然想到一句话:差一步就成功的距离 = 差几万米就成功的距离 部分的理解和都体现在代码和注释里 using S ...
- python 21 面向对象
目录 1. 面向对象初步认识 2. 面向对象的结构 3. 从类名的角度研究类 3.1 类名操作类中的属性 3.2 类名调用类中的方法 4. 从对象的角度研究类 4.1 类名() 4.2 对象操作对象空 ...
随机推荐
- nyoj117 求逆序数
求逆序数 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序.一个排列中 ...
- uestc oj 1217 The Battle of Chibi (dp + 离散化 + 树状数组)
题目链接:http://acm.uestc.edu.cn/#/problem/show/1217 给你一个长为n的数组,问你有多少个长度严格为m的上升子序列. dp[i][j]表示以a[i]结尾长为j ...
- Codeforces 710 E. Generate a String (dp)
题目链接:http://codeforces.com/problemset/problem/710/E 加或者减一个字符代价为x,字符数量翻倍代价为y,初始空字符,问你到n个字符的最小代价是多少. d ...
- INVALID_SOCKET的值
INVALID_SOCKET的值 (2011-06-26 15:06:45) 标签: 杂谈 INVALID_SOCKET的值不是-1,原因参考basetsd.h和WinSock2.h: typedef ...
- Oracle数据库多语言文字存储解决方案
一.关于字符集 字符集(也称字元集,Character Set)就是字符编码表(codepage),一个字符不论英文.中文.韩文等在计算机系统内存或硬盘中通过二进制的字节(Byte)保存,这个二进制的 ...
- Python学习入门基础教程(learning Python)--5.2 Python读文件基础
上节简单的说明了一下Pyhon下的文件读写基本流程,从本节开始,我们做几个小例子来具体展示一下Python下的文件操作,本节主要是详细讲述Python的文件读操作. 下面举一个例子,例子的功能是读取当 ...
- windows的iis做后门,隐藏访问,无日志<转>
windows下的iis5/iis6做后门,隐藏访问,不留访问记录或者不留日志 好不容易攻下一台Windows2000/2003 IIS服务器,你一定会想,怎样才能长期占有这个“肉鸡”呢?聪明的你肯定 ...
- PL/pgSQL学习笔记之七
http://www.postgresql.org/docs/9.1/static/plpgsql-declarations.html 如果一个PL/pgSQL函数声明了输出参数,输出参数被赋予$n名 ...
- NLog官方文档
NLog快速使用 NLog配置 NLog通过代码定义配置 Target Layouts Layout Renderers
- k近邻法的C++实现:kd树
1.k近邻算法的思想 给定一个训练集,对于新的输入实例,在训练集中找到与该实例最近的k个实例,这k个实例中的多数属于某个类,就把该输入实例分为这个类. 因为要找到最近的k个实例,所以计算输入实例与训练 ...