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 对象操作对象空 ...
随机推荐
- Spring Boot 所提供的配置优先级顺序
按照优先级从高到低的顺序,具体的列表如下所示. 命令行参数. 通过 System.getProperties() 获取的 Java 系统参数. 操作系统环境变量. 从 java:comp/env 得到 ...
- HDU 5074 Luck Competition (暴力,概率)
题意:有 n 个人参加比赛,给出n-1个人的成绩,然后要选出一个幸运的人,先把所有的分数求平均数,然后再*2/3,那个不大于这个数,且最接近的数,就是最幸运的, 让你设置最后一个人的分,使他是最幸运的 ...
- 分享一下jQuery UI的地址
jQuery EasyUI: http://www.jeasyui.com/ DWZ: http://j-ui.com/ Liger UI: http://www.ligerui.com/ Liger ...
- php二叉树算法
二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒.二叉树的第i层至多有2^{i-1}个结点:深度为k的二叉树至多有2^k-1个结点:对任何一棵二叉树T,如 ...
- Git版本管理:Windows下Git配置与使用指南
简要介绍:Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理. 一.安装 软件:msysGit-fullinstall-1.8.1.2 打开之后设置安装路径,默认为 ...
- C语言运算符表
优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右 () 圆括号 (表达式)/函数名(形参表) . 成员选择(对象) 对象.成员名 -& ...
- 笔记本键盘上没有break键的解决方案
django在Windows上调试需要用ctrl+break终止服务器……笔记本键盘上没有break好尴尬…… 在百度搜了很多都没有找到,最后终于在谷歌上找到了英文版的解决方案. starting o ...
- Hex-Rays decompiler type definitions and convenience macros
/****************************************************************************************** Copyrigh ...
- function设置jsp页面使用js控制文本框只读,并且按下backspace删除按钮后停在原页面
最近一直在学习function设置之类的问题,现在正好有机会和大家分享一下. 设置只读 document.getElementById("projcode").setAttribu ...
- ASP.NET Web Forms的改进
虽然ASP.NET Web Forms不是vNext计划的一部分,但它并没有被忽视.作为Visual Studio 2013 Update 2的一部分,它重新开始支持新工具.EF集成和Roslyn. ...