C# 面向对象技术

简介:

一.基础知识

类:

封装的好处:良好的封装能够减少耦合;类内部的实现可以自由地修改;类具有清晰的对外接口。

类是C#中的一种结构,用于在程序中模拟现实生活的对象;

成员变量表示对象的特征;

方法表示对象可执行的操作;

如果类中未定义构造函数,则由运行库提供默认构造函数;

析构函数不能重载,并且每个类只能有一个析构函数;

可以根据不同数量的参数或不同数据类型参数对方法进行重载,不能根据返回值进行方法重载;

命名空间用来界定类所属的范围,类似于Java中的包。


特征:

继承是获得现有类的功能的过程;

创建新类所根据的基础类称为基类或父类,新建的类则称为派生类或子类;

base关键字用于从派生类中访问基类成员;

override关键字用于修改方法、属性或索引器。new访问修饰符用于显式隐藏继承自基类的成员;

抽象类是指至少一个抽象成员(尚未实现的方法)的类,抽象类不能实现;

重写方法就是修改基类中方法的实现,virtual关键字用于 修改方法的声明;

显示接口实现是用于在名称不明确的情况下确定成员函数实现的事哪一个接口。


高级:

错误和异常 

C#使用一种技术,即异常处理,为处理错误情况提供了一种机制,这就为每种错误情况提供了定制的处理方式,也把标识错误的代码与处理错的代码分离开来;

数据类型转换

如何隐式或显式地转换数据类型;

预处理

在编译代码时,第一部进行预处理,这样就可以在代码上进行文本替换了,也可以生成不同的程序,以满足不同情况的需要;

不安全代码

C#通常会陷藏内存访问的细节,简化代码的处理,但有一些情况需要直接访问内存。C#允许把标记的代码声明为不安全的代码,直接访问内存。


名词解释:

运算符重载

可以对类的实例进行加、减、乘、除等操作;

索引符

它允许在语法上按照数组来处理,并简化包含许多对象的类的使用;

委托

C#允许代码引用一个方法,而这样无需指定引用什么方法,可以在运行时再指定,委托就是这样一种方式,类似于C++中函数指针,但是它们是类型安全的和面向对象的;

事件

在编程时,通常需要告诉一些代码什么进修执行某个操作,例如用户什么时候单击了鼠标按钮。C#使用事件为这种场合提供;额内置支持。

this关键字

this 是一个保留字,仅限于构造函数和方法成员中使用

在类的构造函数中出现表示对正在构造的对象本身的引用,在类的方法中出现表示对调用该方法的对象的引用,在结构的构造上函数中出现表示对正在构造的结构的引用,在结构的方法中出现表示对调用该方法的结果的引用

this 保留字不能用于静态成员的实现里,因为这时对象或结构并未实例化

在 C# 系统中,this 实际上是一个常量,所以不能使用this++ 这样的运算

this 保留字一般用于限定同名的隐藏成员、将对象本身做为参数、声明索引访问器、判断传入参数的对象是否为本身

二.学习历程

在学习C#的过程中,可谓是:很心酸!感觉虽说是学习过相关的知识语言,可依然感觉好难懂。先画出一幅图,描述一下历程吧。

在学习的时候仍感觉这个语言有点儿很不同,自己能力还不及,还需努力呀!


                                                                 


三.对比成长

1.类和结构的区别?

类:

类是引用类型在堆上分配,类的实例进行赋值只是复制了引用,都指向同一段实际对象分配的内存

类有构造和析构函数

类可以继承和被继承

结构:

结构是值类型在栈上分配(虽然栈的访问速度比较堆要快,但栈的资源有限放),结构的赋值将分配产生一个新的对象。

结构没有构造函数,但可以添加。结构没有析构函数

结构不可以继承自另一个结构或被继承,但和类一样可以继承自接口


2.接口的多继承会带来哪些问题?

C# 中的接口与类不同,可以使用多继承,即一个子接口可以有多个父接口。但如果两个父成员具有同名的成员,就产生了二义性(这也正是C# 中类取消了多继承的原因之一),这时在实现时最好使用显式的声明


3.抽象类和接口的区别?

抽象类(abstract class)可以包含功能定义和实现,接口(interface)只能包含功能定义

抽象类是从一系列相关对象中抽象出来的概念,因此反映的是事物的内部共性;接口是为了满足外部调用而定义的一个功能约定,因此反映的是事物的外部特性

分析对象,提炼内部共性形成抽象类,用以表示对象本质,即“是什么”

为外部提供调用或功能需要扩充时优先使用接口


4.什么是反射?

反射,Reflection,通过它我们可以在运行时获得各种信息,如程序集、模块、类型、字段、属性、方法和事件

通过对类型动态实例化后,还可以对其执行操作

简单来说就是用string可以在runtime为所欲为的东西,实际上就是一个.netframework内建的万能工厂

一般用于插件式框架程序和设计模式的实现,当然反射是一种手段可以充分发挥其能量来完成你想做的任何事情(前面好象见过一位高人用反射调用一个官方类库中未说明的函数。)


5.什么是委托、委托链?

委托(delegate)是一种引用类型,我们在处理他的时候要当作类来看待而不是方法,说白了委托就是对方法或者方法列表的引用,调用一个委托实例就好像是调用c++中的指针一样,他封装了对制定方法的引用,或者说委托起到的是桥梁的作用,实例后的委托对象会将给定的参数传递给他所回调的方法,并去执行方法。

委托链我们知道委托是对方法的封装,而且委托可以封装很多方法形成委托链,其实委托就好像是一个容器,他封装了我们想要实现的若干方法,当调用委托对象(相当于c++中的指针)时,就会顺序的执行它所封装的所有的方法,如果有返回值的话,往往返回的是最后一个被执行的方法的返回值,委托链的形成可以用"+="或"-="对不同的委托实例进行二元操作。











目录
相关文章
|
7月前
|
自然语言处理 Java 编译器
C#OOP之一面向对象简介
C#OOP之一面向对象简介
40 0
|
1月前
|
存储 开发框架 安全
C# .NET面试系列二:面向对象
<h2>面向对象 #### 1. 什么是构造函数? 构造函数(Constructor)是一种特殊类型的方法,它在创建类的实例(对象)时被调用,用于初始化对象的状态。构造函数的名称必须与包含它的类的名称相同,并且没有返回类型。 主要特点和用途包括: 初始化对象: ```c# 构造函数主要用于初始化类的实例。当使用 new 关键字创建类的对象时,构造函数会被调用,确保对象在使用之前处于一个合适的状态。 ``` 与类同名: ``` 构造函数的名称必须与包含它的类的名称完全相同。 ``` 没有返回类型: ```c# 构造函数没有返回类型,甚至不能声明 void。它的目的是初始化对象
48 0
|
8月前
|
设计模式 算法 C#
28【WinForm】C#实现商场收银软件,从面向过程到面向对象,设计模式的应用
实现商场收银系统从简单的面向过程到面向对象的演变。
85 0
|
9月前
|
数据可视化 程序员 C#
C# 面向对象三大特性
C# 面向对象三大特性
68 0
|
9月前
|
C#
【C#视频】面向对象、数据类型
【C#视频】面向对象、数据类型
|
9月前
|
C#
C#视频之面向对象
C#视频之面向对象
48 0
|
10月前
|
C#
C#面向对象知识
C#面向对象知识
36 0
|
10月前
|
存储 开发框架 Java
C#面向对象程序设计课程实验五:实验名称:C#面向对象技术
C#面向对象程序设计课程实验五:实验名称:C#面向对象技术
C#面向对象程序设计课程实验五:实验名称:C#面向对象技术
C#面向对象程序设计课程实验四:实验名称:C#面向对象程序设计基础
C#面向对象程序设计课程实验四:实验名称:C#面向对象程序设计基础
C#面向对象程序设计课程实验四:实验名称:C#面向对象程序设计基础