对于C#的一些注意事项

功能完成,下班走人.今天不用加太晚,嘿嘿,周四了啊,还行,这周过得挺充实的,

学习还是复习?都一样啦,反正每次看都有新的理解

今天写点知识点和个人理解吧

一::.我如何理解事件与委托的概念?
其实事件就是一个狭义的委托,也就是事件是一个用于事件驱动的专用委托,你可以在客户端代码中直接调用委托来激发委托指向的函数,而事件不可以,事件的触发只能由服务代码自己触发。也就是说在你的代码里委托不但可以安排谁是它的调用函数,还可以直接调用它,而时间不能直接调用,只能通过某些操作触发. 事件还拥有委托的所有功能,包括多播特性。即事件可以有多个事件处理函数,委托同样也可以是多播委托.

二::…抽象类和接口的异同:
相同点:1)都可以被继承
2)都不能被实例化
3)都可以包含方法声明
4)派生类(子类)必须实现未实现的方法
不同点:1)抽象类可以定义字段,属性,方法实现。接口只能定义属性,索引器,事件,和方法声明,不能包含字段
2)抽象类是一个不完整的类,需要进一步细化,而接口是一个行为规范
3)接口可以被多重实现,抽象类只能被单一继承
4)抽象类更多的是定义在一系列紧密相关的类间,而接口大多数是关系疏松但都实现某一功能的类中
5)抽象类是从一系列相关对象中抽象出来的概念,因此反映的是事物的内部共性;接口是为了满足外部调用而定义的一个功能约定,因此反映的是事物的外部特性。
6)接口基本上不具备继承的任何特点,它仅仅承诺了能够调用的方法。
7)抽象类实现的具体方法默认为虚的,但实现接口的类中的接口方法却默认为非虚的,当然你也可以声明为虚的
8)如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法

三::.const与readonly的区别?
readonly和const都是用来标识常量的。
初始化值不同
const字段是编译时常量,而readonly字段可用于运行时常量。
const默认是静态的,而readonly如果设置成静态的就必须显示声明。
const修饰的值类型是有限制的,object、Array(数组)和struct(结构)不能声明为const常量。 readonly可以是任何类型。
readonly只能用来修饰类的field,而不能修饰局部变量,也不能修饰property等其它类成员

四::.ref参数和out参数是什么?有何区别?
使用ref型参数时,传入的参数必须先被初始化。对out而言,必须在方法中对其完成初始化、使用ref和out时,在方法的参数和执行方法时,都要加Ref或Out关键字。以满足匹配、out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候。

五::.请简述值类型和引用类型的区别
①值类型的数据存储在内存的栈中;引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的地址。
② 值类型存取速度快,引用类型存取速度慢。
③ 值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或引用
④ 值类型继承自System.ValueType,引用类型继承自System.Object
⑤ 栈的内存分配是自动释放;而堆在.NET中会有GC来释放的事情时,事件对象处理通知过程。
委托是一种引用方法的类型,一旦为委托分配了方法,委托将与该方法具有完全相同的行为。而事件是说在发生其他类或对象关注的事情时,类和对象可通过事件通知他们。
委托的关键字是delegate,事件是event
委托:参数相同,返回值相同。

六::.什么是泛型,解释泛型的含义及优点
泛型是具有占位符(类型参数)的类,结构,接口和方法。这些占位符是类。结构。接口和方法所存储或使用的一个或多个类型的占位符。泛型集合类可以将类型参数用作它所存储的对象的类型的占位符。类型参数作为其字段的类型和其方法的参数类型出现。
通常情况下,都建议使用泛型集合,因为这样可以获得类型安全的直接优点而不需要从基集合类型派生并实现类型特定的成员,此外,如果集合元素为值类型,泛型集合类型的性能通常优于对应的非泛型集合类型(并优于从非泛型基集合类型派生的类型),因为使用泛型时不必对元素进行装箱。

七::.在C#中Struct和class类的区别
1,class?是引用类型,structs是值类型
既然class是引用类型,class可以设为null。但是我们不能将struct设为null,因为它是值类型。
2,当你实例化一个class,它将创建在堆上。而你实例化一个struct,它将创建在栈上
3,你使用的是一个对class实例的引用。而你使用的不是对一个struct的引用。(而是直接使用它们)
4,当我们将class作为参数传给一个方法,我们传递的是一个引用。struct传递的是值而非引用。
5,structs?不可以有初始化器,class可以有初始化器。
6,Classes?可以有明显的无参数构造器,但是Struct不可以
7,类使用前必须new关键字实例化,Struct不需要
8,class支持继承和多态,Struct不支持. 注意:但是Struct 可以和类一样实现接口

八::.C# 中反射的含义是什么 , 使用的情景有哪些?
反射提供了封装程序集、模块和类型的对象(Type 类型)。可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性。如果代码中使用了属性,可以利用反射对它们进行访问
反射可以在运行时获得其他DLL的类型、字段等信息,可以方便的调用这些dll定义的方法。这就使得一些事先设计好的dll可以以装配件的形式,被宿主程序调用
反射通常具有以下用途。
(1)使用Assembly定义和加载程序集,加载在程序集清单中列出模块,以及从此程序集中查找类型并创建该类型的实例。
(2)使用Module了解包含模块的程序集以及模块中的类等,还可以获取在模块上定义的所有全局方法或其他特定的非全局方法。
(3)使用ConstructorInfo了解构造函数的名称、参数、访问修饰符(如pulic 或private)和实现详细信息(如abstract或virtual)等。使用Type的GetConstructors或GetConstructor方法来调用特定的构造函数。
(4)使用MethodInfo了解方法的名称、返回类型、参数、访问修饰符(如pulic 或private)和实现详细信息(如abstract或virtual)等。使用Type的GetMethods或GetMethod方法来调用特定的方法。
(5)使用FiedInfo了解字段的名称、访问修饰符(如public或private)和实现详细信息(如static)等,并获取或设置字段值。
(6)使用EventInfo了解事件的名称、事件处理程序数据类型、自定义属性、声明类型和反射类型等,添加或移除事件处理程序。
(7)使用PropertyInfo了解属性的名称、数据类型、声明类型、反射类型和只读或可写状态等,获取或设置属性值。
(8)使用ParameterInfo了解参数的名称、数据类型、是输入参数还是输出参数,以及参数在方法签名中的位置等。

九::.进程和线程的区别?
进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于:
线程的划分尺度小于进程,使得多线程程序的并发性高。
另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。
进程(Process)是最初定义在Unix等多用户、多任务操作系统环境下用于表示应用程序在内存环境中基本执行单元的概念。以Unix操作系统为例,进程是Unix操作系统环境中的基本成分、是系统资源分配的基本单位。Unix操作系统中完成的几乎所有用户管理和资源分配等工作都是通过操作系统对应用程序进程的控制来实现的。


粘粘写写先这么多,具体的以后想到再补充给自己吧.
如果有哪些摘抄的,影响到您的利益,请立即私信我,我会道歉并马上删除!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值