C#面向对象编程的注意事项

* 注意自己的命名,

* [JIT]即时编译:运行到哪里编译到哪里,编译之后就放到了内存之中。

* 局部变量(在方法中申明)必须先付值在使用。

* 越抽象的类就可以当做父类。
* 里氏替换原则:

就是需要一个父类的类型的时候给了一个子类的对象是可以的。

*:快捷键

   *导入命名空间(shift+alt+F10)

   *构造函数:CTOR

   * :base():表示调用父类的构造函数

**This来调用本类的成员,base来调用父类中的成员。

**访问级别约束

*多态的实现 

*:静态的构造函数

    *:在静态类中所包含的所有成员都必须的是静态成员。静态属性只有用类名.出来,不能用实例化对象来点出来。<静态成员的生命周期是很长的,一般在程序退出的时候才会被回收释放资源,而实例化的对象一用完就会被GC回收。>

*记录代码的时候要记其主要的结构,主要的步奏。

    这个是在类里面声明一个静态的属性,其次就是一个隐藏静态的构造函数。静态构造函数只执行一次,(第一次使用静态类,静态成员,静态方法)

静态的构造函数不能手动调用,而是在第一次使用静态类的时候自动调用的,没有访问修饰符,也没有任何参数。具体的值是在里面设置好的。

多态<同一段代码在执行的时候有不同的功能>

*类型的另外一种类型转换

<只是这种转换不提示错误,值变为null,强类型转换则直接报异常。>

Student a=p as Student();

  *抽象类

  《就是在类前面加一个abstract就是抽象类》

一般的类就是抽象的,但是抽象类是比较高级的抽象的类,不能被实例化。

下面是抽象类的一般特性

  抽象类只定义不能在其中有具体的实现,智能在继承的子类中进行重写。

*注意以后在使用类属性的时候,在给其属性赋值的时候都要放在构造函数(CTOR)里面。

**练习实例

*:值类型与引用类型

  值类型:以字节保存在内存《保存在栈》里面,不可继承

  <int char double long short enum decime等>

  引用类型;在堆,栈里面都有保存,在栈里面只保存堆里面的地址,实际的值是放在堆里面的。可以继承

  <string 数组 类 接口,委托 >

  <引用传递,值传递>

      ……引用传递:拷贝栈中的堆地址,指向同一块堆;

      ……ref的引用传递:两个变量指向同一个栈(栈中有数据)的地址,那就是他们指向的堆是同一个,不管改变那一个,堆里面的数据都会改变。

      ……值传递:拷贝栈中的内容,将其作为一个副本。

  (栈里面数据进行拷贝的时候是复制数据,为一个副本)

*:接口问题探讨

在Java里面老师说就看下楼层上面的管道,这样就可以可联想到接口的具体意义。

接口的定义与命名

  *一般接口以大写I开头,-able结尾,关键字是interface

  *接口里面只能包含方法(方法,属性,索引器,事件)。

  *接口里面都不能写任何访问修饰符。<接口中默认为public的访问修饰符>

  *接口不能被实例化,属性只能写(get;set;)方法,不能再继续写。

  *接口中的成员子类必需全部实现。接口可以“多继承”一个类只能继承自一个父类但是可以实现多个接口。

Public class interface IFlyable

{

    Void SayHi();

    //索引器

    String this[int index]

   {

       get;set;

    }

}

*:接口实例

接口的实现分为两种,直接实现,显示实现接口,直接实现是公共的public,而显示实现接口是解决重名问题的,为私有的。

*类型转换

*显式转换,隐式转换,强类型转换(容易丢失精度)

1:sizeof判断其占用几个字节,

{console.writeline(sizeof(int))}

2:隐式转换(当其数据类型一致,且大字节转换为小字节的会发生类型转换。)

3:所有数组的父类是Array类型。

*异常处理<try---catch----finally>

*运行时程序出现的错误

  *finally: 代码清理,释放资源,无论发生了什么它里面的内容都讲会被执行。相当与在C语言里面switch后面的define的含义。

  *当程序中某行代码出错,后面的代码就不会往后执行。

  *对于异常的处理我们可以写多个catch(里面的异常方法不一样)来处理各自的异常。

*手动异常的抛出<多使用逻辑判断来解决异常。为了不浪费资源。>

  Throw new Exception(“有异常了”)

*方法会为返回值单独设置变量,这样子返回值里面的值就不会改变了。

Ref和Out比较

*比较两个对象是否为同一个对象

  Console.writeline(object.ReferenceEquals(p1,p2));

  Console.writeline(object.ReferenceEquals(p1,p3));

若p1和p2为同一对象则返回值为true,若不是则返回值为false.

*关键字sealed<此为密封类>

   在其前面加上一个关键字sealed表示此类不被继承。

*字符串(string )的不可变性和字符串池

    1:String的相加减是字符串的叠加,会开批新的堆内存。

2:字符串常量的保存将能保存到堆内存中,也就是保存在了字符串池中。也相当与保存到块表里面。<string.IsInterned()>

*字符串

1:字符串格式化

这里是取代站位符,Console.WriteLine(“我今年(0,-10,c2)岁了”,22);

2:StringBuilder类的使用

一般的情况都是在使用字符串拼接的时候才会用到,因为它的速度快。

  3:监视字符串等C#程序的快慢的方法

在需要添加监视的程序前面实例化Stopwatch对象。

Stopwatch watch=new Stopwatch();

watch.Start()

//这中间是需要看执行时间的程序

Watch.Stop();

Console.WriteLine(watch.Elapsed);

4:弱引用

就是变量在初始化完成之后,在栈里面没有地址指向它,则它将被GC回收,此时用WeakReference重新申明一下,就是将其弱引用下,以后使用的时候直接使用就可以使用。<WeakReference wr=new WeakReference(p)>

转载于:https://www.cnblogs.com/netxiaohui/p/4799976.html

面向对象基础知识01相关推荐

  1. #笔记-面向对象基础知识

    面向对象基础知识 文章目录 面向对象基础知识 @[toc] 1.面向对象的软件开发方法分 1. 1.面向对象软件开发的主要思想 1. 2.面向对象方法的优点 1. 3.面向对象开发方法的组成 2.面向 ...

  2. python图形编程基础知识_AI-图像基础知识-01|python基础教程|python入门|python教程

    目前人工智能Artificial Intelligence主要分为两大分支: 计算机视常见:Computer Vision,简称CV CV主要是研究如何让机器看懂世界的一种技术,通过各种光学传感器来代 ...

  3. PHP中oop面向对象基础知识(一)

                                                                                        OOP 基础知识汇总(一) &g ...

  4. 模块一:Go语言基础知识 -01 | 工作区和GOPATH

    01 | 工作区和GOPATH Go 语言规范文档 The Go Programming Language Specification https://golang.google.cn/ref/spe ...

  5. 面向对象基础知识整理

    1.什么是对象? 什么是类? 对象是可以看的见摸得着的,对象可以是任何东西,比如水杯,书,手机等.准确的说,对象是一个自包含的实体,用一组可识别的特性和行为标识的. 类就是具有相同的属性和功能的对象的 ...

  6. python面向对象基础知识

    python基础链接 类和对象 类和对象是面向对象编程的两个核心概念. 类 类是对一群具有相同特征或者行为 的事物的一个统称,是抽象的,不能直接使用 特征其实就是一个变量,在类里我们称之为属性. 行为 ...

  7. Mysql基础知识01

    文章目录 一.数据库简介 二.MySQL 三.MySQL安装 四.sql常用命令行 五.操作数据库 六.数据库列的类型 七.字段属性 八.数据表的类型 九.修改和删除数据表字段 一.数据库简介 数据库 ...

  8. python面向对象基础知识_Python基础知识day08面向对象(上)

    本帖最后由 小江哥 于 2018-9-14 11:45 编辑 面向对象编程介绍 想一想 请用程序描述如下事情: · A同学报道登记信息 · B同学报道登记信息 · C同学报道登记信息 · A同学做自我 ...

  9. 通信网络基础知识01

    文章目录 1. 简单了解 1.1 OLT(光线路终端): 1.2 ODN(分光器): 1.3 ONU(光网络单元) 2.OAN(光纤接入网) 2.1 分类 2.2 PON(Passive Optica ...

最新文章

  1. Vue学习小札——2.6 组件参数校验与非props特性
  2. Python3 出现'ascii' codec can't encode characters问题
  3. 浦发银行招聘计算机类笔试题,2019浦发银行招聘计算机模拟试题及答案
  4. 随机森林RF、XGBoost、GBDT和LightGBM的原理和区别
  5. mysql存储过程触发器_MySQL存储过程及触发器
  6. JVM系列四:生产环境参数实例及分析【生产环境实例增加中】
  7. 【Django 2021年最新版教程31】Jmeter安装 如何并发测试
  8. 使用mysql 函数 IFNULL 解决某些字段为null
  9. gpasswd 附属组管理,添加用户到附属组中
  10. 基于MATLAB的基础图像分析
  11. webstack开源网站导航源码
  12. VS Code设置缩进两个字符
  13. Blue Coat 最新报告显示 移动端恶意攻击愈演愈烈
  14. 《MATLAB App Designer从入门到实践》随书源代码
  15. Unity插件精选:炫酷粒子特效(V客学院知识分享)
  16. centos 禁止自动锁屏
  17. kubectl logs和docker logs输出日志不同的问题
  18. 2018年Android面试题含答案--适合中高级
  19. windows10系统设置选项里没有触摸板选项
  20. java 历遍 类_[Java] 遍历指定包名下所有的类(支持jar) | 学步园

热门文章

  1. vs2008环境下MFC对注册表的读写操作
  2. HDU Problem - 5918 Sequence I
  3. 一块钱买一瓶水,两个空瓶换一瓶水,三个瓶盖换一瓶水,现在有20块钱,一共可以喝多少瓶水?
  4. 坑 之 TypeError: List of Tensors when single Tensor expected
  5. pipenv ModuleNotFoundError: No module named ‘virtualenv.seed.via_app_data‘
  6. 计组-CPU的功能和基础结构
  7. 概率论-2.2 随机变量的数学期望(重点:随机变量X的期望)
  8. Linux系统调用号表
  9. c++11 Type Alias
  10. 深入理解Java类加载器:Java类加载原理解析