大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> NET专区 -> The C# Programming Language Notes

The C# Programming Language Notes

时间: 2021-07-31 作者:daque

1,不完全的abstract纵然是abstract class,也不许对实行的接口的某个分子漠不关心,即底下如许是不承诺的:interface in_one{ void a();}abstract class base_one : in_one{ }这一点上仍旧java简单,尽管c#的初志是什么2,out参数与南针的南针out子类不许变化为out基类,即使承诺变换的化,将没辙保护典型安定性;即out参数十分于南针的南针,而父类的南针与子类的南针是没有接受联系的,以是不许变化3,强迫对准接口编制程序对准接口编制程序不过一个普遍性的规则,但c#供给了一种体制,抑制存户步调员按照接口来援用你的实行类:显式接口分子 interface a{ void a(); } class a_sub:a { void a.a() { } } static void main(string[] args) { ((a)new a_sub()).a(); //ok! new a_sub().a(); //error! }显式接口分子实行步调跟其余分子比拟,有各别的考察本领个性。由于显式接口分子不许经过实行类考察,以是,它们从发觉上是独占的。然而,因为它们不妨经过接口援用考察,从发觉上它们又是大众的。显式接口分子实行步调重要效劳于两个手段:a,类或构造实行一个存户不感爱好的里面接口b,用沟通的出面取消接口分子的歧异为了使显式接口分子实行步调灵验,类或分子必需在它的基础类列表中定名一个接口,这个列表中包括一个分子,它的十足灵验称呼、典型和参数典型与显式接口分子实行步调的那些要实足普遍4,@ 废除转义废除字符串转义尚可领会,然而连要害字都形成普遍标识了,简直看不出有多大意旨5,struct的结构因变量自设置的ctor并不许湮没默许的无参结构因变量,稍有不料,却也在道理之中,默许无参结构因变量对于struct有杰出设置的语义6,const,readonlyconst十分于c++的static constreadonly十分于c++的const以是,const十分于static readonly,固然,仍旧有些辨别,const编写翻译时赢得值,static readonly运转时 public class color { public const color black = new color(0, 0, 0); //error public static readonly color white = new color(255, 255, 255); //ok private color(byte r, byte g, byte b) { } }7,天然的boxing,unboxingstring s = "abc";object o = s;int i = 123;object o = i;对于string的例子都不会诧异,干什么要特出周旋int的例子呢?string是system.string的别号,只有把int看成system.int32的别号,十足不都很天然了吗?int真实是system.int32的别号,int和string仍旧有辨别的,boxing后的值会被复制,数组挪用很精确的不会扩充到数值典型的数组大概是功效的因为吧8,智能的自设置转型c++不承诺一次变换中挪用胜过一次的自设置转型操纵符,c#同样不承诺,各别的是c#会在挪用自设置转型操纵符前后为源典型和目的典型各插入一次机动探求的规范转型操纵,即使须要的话;大略的说;9,操纵符重载c++里外存由步调员处置,承诺重载new操纵符,c#则天经地义的遏止了对new的重载c++里算术演算符+-*/等重载后,其贯串情势+=,-=,*=,/=不会被机动重载,c#为了保护语义普遍性,机动重载了它们的贯串情势c++里短路论理演算符&&,||重载后不复具备短路的个性,c#简洁遏止了对它们的重载,只能经过以次情势灵活,果然维持了短路的语义: class test { public static bool operator false(test test){ return false; } public static bool operator true(test test){ return false; } public static test operator & (test lhs, test rhs){ return lhs; } public static test operator | (test lhs, test rhs){ return lhs; } static void main(string[] args) { if(new test() && new test()){ } } }10,效率域与java有点不一律,嵌套块中称呼沟通的操作符都必需援用沟通的实业,这项准则保护一个表白式左右文中称呼的意旨在一个块中是沟通的:class test{ double x; void f(bool b) { x = 1.0; if (b) { int x = 1; } }}是缺点的,由于x在外部块中(在if语句中包括嵌套块的扩充)援用了各别的实业。差异,例子class test{ double x; void f(bool b) { if (b) { x = 1.0; }else { int x = 1; } }}是承诺的,由于称呼x在外部块中长久不会运用11,摆脱finally与java一律,finally中抛出特殊,向来的特殊(假设有的话)将被中断;不一律的是,不承诺运用return,goto等摆脱finally,不知干什么12,子包与外层包与java不一律,子包果然能考察外层包,不必using,简单,但有理否?13,属性权力get/set犹如不许树立各别的权力,比方,我想internal set,而public get,不知如何弄14,序列化当绝大局部域不妨运用默许序列化,少量须要特出处置时,将那少量几个域做出internal独力东西,令其自设置序列化,而后原东西中包括这个独力东西15,int[][]是一维数组int[,]才是二维的,矩阵int[][]本质是锯条 int[][] one = new int[7][]; int[,] two = new int[3,2];维引导符在结果的非数组元素前被从左到右读。比方典型int[][,,][,]是一个int典型的两维数组的三维数组的单维数组数组挪用很精确的不会扩充到数值典型的数组,比方,不生存不妨承诺把int[]看作object[]的变换数组初始化步调必需有与数组维数一律的嵌套级别。最外层嵌套与最左边的维数对应,而最里层的嵌套与最右边的维数对应16,new virtual有没有意旨?class a{ public virtual void f() { console.writeline("a.f"); }}class b: a{ public override void f() { console.writeline("b.f"); }}class c: b{ new public virtual void f() { console.writeline("c.f"); }}class d: c{ public override void f() { console.writeline("d.f"); }}class test{ static void main() { d d = new d(); a a = d; b b = d; c c = d; a.f(); b.f(); c.f(); d.f(); }}类c和d包括两个有沟通出面的假造本领:一个被a引入而一个被c引入。被c引入的本领湮没了从a接受的本领。如许,d中的掩盖证明掩盖了被c引入的本领,而d掩盖被a引入的本领是不大概的。例子爆发底下的输入:b.fb.fd.fd.f什么情景下,什么来由,咱们须要new virtual?17,override时没辙变换考察化装纵然是放宽18,x+=y 截止有大概是void“在一个情势为x += y 或 x -= y的操纵中,当x是一个事变分子而援用在x地方的典型表面爆发时,操纵的截止即是void;这个准则遏止外部代码径直查看事变分子” ???19,结构因变量实行程序不妨把一个范例变量初始化因变量和一个结构因变量初始化因变量,看作是机动插在结构因变量主体中的第一条语句前。例子class a{ int x = 1, y = -1, count; public a() { count = 0; } public a(int n) { count = n; }}class b: a{ double sqrt2 = math.sqrt(2.0); arraylist items = new arraylist(100); int max; public b(): this(100) { items.add("default"); } public b(int n): base(n – 1) { max = n; }}包括了很多变量初始化因变量,而且也包括了每个情势(base和this)的结构因变量初始化因变量。这个例子与底下引见的例子关系,在何处,每条解释指领会一个机动插入的语句(机动插入结构因变量挪用所运用的语法不是灵验的,起码用来演练这个体制)。class a{ int x, y, count; public a() { x = 1; // variable initializer y = -1; // variable initializer object(); // invoke object() constructor count = 0; } public a(int n) { x = 1; // variable initializer y = -1; // variable initializer object(); // invoke object() constructor count = n; }}class b: a{ double sqrt2; arraylist items; int max; public b(): this(100) { b(100); // invoke b(int) constructor items.add("default"); } public b(int n): base(n – 1) { sqrt2 = math.sqrt(2.0); // variable initializer items = new arraylist(100); // variable initializer a(n – 1); // invoke a(int) constructor max = n; }}提防变量初始化因变量被变换为赋值语句,而且谁人赋值语句在对基类结构因变量挪用前实行。这个程序保证了一切范例域在任何考察范例的语句实行前,被它们的变量初始化因变量初始化。比方:class a{ public a() { printfields(); } public virtual void printfields() {}}class b: a{ int x = 1; int y; public b() { y = -1; } public override void printfields() { console.writeline("x = {0}, y = {1}", x, y); }}当new b() 被用来创造b的范例时,爆发底下的输入:x = 1, y = 0由于变量初始化因变量在基类结构因变量被挪用前实行,以是x的数值是1。然而,y的数值是0(int的默许数值),这是由于对y的赋值直到基类结构因变量归来才被实行。静态结构因变量机动被挪用,不许被显式挪用。固然供给了很多牵制前提,然而静态结构因变量实行的真实功夫和程序是不决定的:一个类的静态结构因变量在这个类的任何范例被创造前实行。一个类的静态结构因变量在类的任何静态分子被援用前实行。一个类的静态结构因变量在它的一切派生类的静态结构因变量实行之后实行。一个类的静态结构因变量从不会被实行一次之上。20,struct不妨实行接口稍有不料,可见struct基础一致于“对基础数据典型域有深正片语义的sealed类”,说完这句话都感触难受21,接口与java不一律,接口不许证明静态恒量和里面类,接口的分子必需是本领、属性、事变或索引22,列举不领会干什么非得跟整型扯上点联系,为了&|操纵?纵然如许,也不妨里面用整型来实行,不用表露出来23,delegate查看者形式在谈话层面包车型的士扶助,优于java.util.observable,delegate是典型安定的,各别于java.util.observable,delegate不是特殊安定的24,前提属性经过对被挪用方举行标志,包办保守的挪用方前提编写翻译,使代码干净,单点电门,又取消了宏的缺陷(the java programming language notes)

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.