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 对象操作对象空 ...
随机推荐
- SO_REUSEADDR和SO_REUSEPORT异同
文章内容来源于stackoverflow上的回答,写的很详细http://stackoverflow.com/questions/14388706/socket-options-so-reuseadd ...
- Type Encoding
[Type Encodings] The compiler encodes the return and argument types for each method in a character s ...
- shell's glob
[shell's glob] basic glob example: range glob example: 参考: http://bash.cumulonim.biz/glob.html
- HDU 5432 Rikka with Tree (BestCoder Round #53 (div.2))
http://acm.hdu.edu.cn/showproblem.php?pid=5423 题目大意:给你一个树 判断这棵树是否是独特的 一颗树是独特的条件:不存在一颗和它本身不同但相似的树 两颗树 ...
- HDU 5707 Combine String (DP,LCS变形)
题意:给定三个字符串,问你第三个是不是由第一个和第二个组成的. 析:当时比赛是没有做出来啊...一直WA,就是没有判断长度,第一个和第二个和是不是和第三个一样,这个忘记... 我们用d[i][j]表示 ...
- How Tomcat Works(八)
下面接着分析Context容器,该接口最重要的方法是addWrapper()方法与creatWrapper()方法,添加具体的子容器,这里是Wrapper容器实例 这里要分析的是一个简单的Contex ...
- sqlserver 自增字段修改为普通主键字段
--增加备份字段alter Table tableName add columnNameBak bigint ; --将主键自增字段 赋值到备份字段update tableNameset column ...
- RESTful Webservice (一) 概念
Representational State Transfer(表述性状态转移) RSET是一种架构风格,其核心是面向资源,REST专门针对网络应用设计和开发方式,以降低开发的复杂性,提高系统的可伸缩 ...
- jquery 更换皮肤
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- udt nat traverse
https://github.com/bakwc/udt-nat-traverse Example of nat traversal using udt library. UDT is a udp b ...