一、组织要领
类的组织要领是类的成员要领的一种,它的作用是对类中的成员举行初始化操纵。类的组织要领分为:
1.静态组织要领
2.实例组织要领
1.静态组织要领
类的静态组织要领是类的成员要领的一种,它的作用是对类中的静态成员举行初始化操纵。下面请看代码实例:
using System; namespace LycheeTest { class Test { //定义一个静态成员变量 private static int a; //定义静态组织函数 static Test() { //初始化静态成员变量 a = 11; } public void Show() { Console.WriteLine("静态字段 a 的值是:{0}", a); } } class Program { static void Main(string[] args) { Test t = new Test(); t.Show(); Console.ReadKey(); } } }
起首,上面这段代码定义了两个类。第 3 行代码定义了类 Test。定义类的时刻,类的接见权限修饰符有两个,一个是 public,另一个是 internal。当不写任何接见修饰符的时刻,类的接见权限默许是 internal。 这个接见权限的意义是,这个类只能被本顺序集接见,不能被本顺序集之外的类接见。假如这个类是属于类库的,那末它必需是 public 的,不然挪用它的顺序集就不能接见它。第 5 行代码定义了一个静态字段成员,第 7 行代码就是静态组织要领。能够看到,静态组织要领的特性是,以 static 症结字申明这个要领是静态的,要领称号要和类名完全相同,这里要注重大小写。静态组织要领不能含有参数,静态组织要领不能有返回值。在静态组织要领体内能够做初始化静态成员的操纵。第 11 行代码定义了一个实例要领,它的作用是输出静态字段的值。在第 16 行的类 Program 中的 Main(注重:在java中是main) 要领中挪用了这个类,第 18行建立了这个类的一个实例,第 19 行 挪用了类的实例要领。
从上面的代码中能够看到,并没有显式挪用类的静态组织要领。
下面请看以上代码的实行效果:
静态字段 a 的值是:11
能够看到,静态组织要领确实是被实行了。那末上例就是静态组织要领的实行前提之一,在类的实例被建立时,类的静态组织要领将被自动挪用。
静态组织要领的挪用序次是在静态字段的初始值设定项以后。
也就是第一步是静态字段的默许值设置,第二步是实行静态字段的初始值设定项,第三步就是挪用类的静态组织要领。
下面将前面的代码实例修正一下,代码以下:
using System; namespace LycheeTest{ class Test { private static int a; static Test() { a++; } public void Show() { Console.WriteLine("静态字段 a 的值是:{0}", a); 14 } } class Program { static void Main(string[] args) { Test t = new Test(); t.Show(); Test t1 = new Test(); t.Show(); Console.ReadKey(); } } }
这段代码将静态组织要领做了修正,在要领体内将静态字段 a 举行自增操纵。然后在代码的第 17 行又 建立了一个类的实例,然后再次挪用类的实例要领。
下面看实行效果:
静态字段 a 的值是:1 静态字段 a 的值是:1
能够看到,静态字段的值并没有增添。这就是静态组织要领实行的特性,它只实行了一次。当顺序集 运转的时刻,将会建立一个应用顺序域,在一个应用顺序域中,类的静态组织要领仅仅实行一次。
下面再对代码实例举行修正以下:
using System; namespace LycheeTest { class Test { public static int a; static Test() { Console.WriteLine("类的静态组织要领最先实行"); a++; } public void Show() { Console.WriteLine("静态字段 a 的值是:{0}", a); } } class Program { static void Main(string[] args) { Console.WriteLine("静态字段 a 的值是:{0}", Test.a); Console.WriteLine("静态字段 a 的值是:{0}", Test.a); Console.ReadKey(); } } }
这段代码在类的静态组织要领中打印输出了一行标记,类的静态字段的接见权限也修正为 public,这让它能够在类外被挪用。在 Main 要领中两次打印输出了静态字段的值,注重在类外挪用类的静态字段须要 运用类名举行援用。
下面是代码的实行效果:
类的静态组织要领最先实行 静态字段 a 的值是:1 静态字段 a 的值是:1
本段代码并没有建立类的实例。在援用类的静态成员之前,类的静态组织要领将被挪用。这个被挪用的类的静态成员包括静态字段和静态要领。这就是类的静态组织要领挪用的第二个前提。
下面再对代码实例举行修正以下:
using System; namespace LycheeTest { class Program { private static int a; static Program() { Console.WriteLine("类的静态组织要领被挪用"); a = 11; } static void Main(string[] args) { Console.WriteLine("Main 要领被挪用"); Console.WriteLine("静态字段 a 的值是:{0}", a); Console.ReadKey(); } } }
这段代码在包括 Main 要领的类中定义了静态字段和静态组织要领。由于 Main 要领也是一个静态要领,类的静态组织要领被挪用而且它是类的进口点要领,那末它和类的静态组织要领之间是谁先挪用呢?下面起首来看代码的实行效果:
类的静态组织要领被挪用 Main 要领被挪用 静态字段 a 的值是:11
经由历程代码的实行效果能够看到,由于类的进口点要领仍然是一个静态要领,那末在任何静态成员被挪用之 前,静态组织要领都起首被挪用。所以,能够得出以下结论,类的静态组织要领先于类的 Main 要领被挪用。
那末类的静态组织要领可否被显式挪用呢?下面看代码实例:
using System; namespace LycheeTest { class Program { private static int a; static Program() { Console.WriteLine("类的静态组织要领被挪用"); a = 11; } static void Main(string[] args) { Program(); Console.ReadKey(); } } }
在这段代码中的第 10 行显式挪用了类的静态组织要领,这时候编译器会报错。
2.实例组织函数
类的实例组织要领是类的成员要领的一种,它的作用是对类的实例成员举行初始化操纵。实例组织要领能够完成重载,在建立类的实例时,能够显式的指定差别的参数来挪用重载的差别的实例组织要领。下面请看代码实例:
using System; namespace LycheeTest { class Program { private static int a; private int b = 12; private string c = "Hello World"; static Program() { Console.WriteLine("类的静态组织要领被挪用"); a = 11; } public Program(int a, string s) { Console.WriteLine("带二个参数的组织要领被挪用"); this.b = a; this.c = s; } public Program(int a) : this(a, "经由历程 this 症结字挪用组织要领") { Console.WriteLine("带一个参数的组织要领被挪用"); } public void Show() { Console.WriteLine("静态字段 a 的值是:{0}", a); Console.WriteLine("实例字段 b 的值是:{0}", b); Console.WriteLine("实例字段 c 的值是:{0}", c); } static void Main(string[] args) { Program p1 = new Program(33, "这是建立的实例 P1"); Program p2 = new Program(34); p1.Show(); p2.Show(); Console.ReadKey(); } }
这段代码的第 4 行、第 5 行和第 6 行离别定义了三个字段成员,第 4 行是静态字段,第 5 行和第 6 行代码都有初始值设定项。代码的第 8 行就是一个实例组织要领的定义,实例组织要领也是以类名作为要领名,它没有返回值, 在要领名前面是接见权限修饰符,能够运用的接见权限修饰符包括 public、private 和 protected。个中的 protected 意味着组织要领只能在此类内部接见。实例组织要领能够带参数。 第 12 行代码的实例组织要领运用两个传入的参数对实例字段举行了赋值。第 17 行代码定义了带一个参数的实例组织要领,它和前一个实例组织要领形成了重载。实例组织要领能够经由历程 this 症结字挪用其他的实例组织要领,要领就是在参数列表的背面运用冒号然后接 this 症结字, 然后再跟参数列表,这个参数列表要婚配另一个重载的实例组织要领。第 17 行的组织要领只要一个参数, 它将这个参数经由历程 this 症结字传递给了另一个组织要领,在用 this 挪用另一个组织要领的时刻,为其同时传入了一个字符串参数。第 24 行的实例要领打印类的字段成员的值。在 Main 要领中,第 26 行代码和第 27 行代码离别定义了两个实例,它们运用 new 症结字挪用了差别的实例组织要领。第 28 行和第 29 行离别挪用实例要领打印类的静态字段和实例的两个字段成员的值。
下面先来看代码的实行效果:
类的静态组织要领被挪用 带二个参数的组织要领被挪用 带二个参数的组织要领被挪用 带一个参数的组织要领被挪用 静态字段 a 的值是:11 实例字段 b 的值是:33 实例字段 c 的值是:这是建立的实例 P1 静态字段 a 的值是:11 实例字段 b 的值是:34 实例字段 c 的值是:经由历程 this 症结字挪用组织要领
现在用实行效果来引见实例组织要领的实行历程,当第 26 行代码建立类的实例时,类的静态字段起首被设置成默许值,由于没有字段的初始值设定项,所以接着就实行类的静态组织要领。这时候静态字段 a 被 设置成 11。由于第 26 行代码运用 new 挪用了带有两个参数的实例组织要领,所以起首实例字段 b 被设置为 0,实例字段 c 被设置为 null。然后实行字段的初始值设定项,b 被赋值为 12,c 被赋值为“Hello World”。接 下来实行实例组织要领体中的第一个语句,“带二个参数的组织要领被挪用”这个字符串被打印。接下来 实例 p1 的字段 b 被设置为传入的参数 33,注重组织要领的形参 a 在这里覆盖了类的静态字段 a。也就是说, 这时候起作用的是实例组织要领的局部变量 a。然后实例字段 c 被设置为字符串"这是建立的实例 P1"。第 27 行代码运用 new 症结字挪用了带一个参数的实例组织要领,在挪用时,起首属于 p2 的实例字段 b 被设置为 0,实例字段 c 被设置为 null。然后实行字段的初始值设定项,b 被赋值为 12,c 被赋值为“Hello World”。接下来实行的是 this 援用的带两个参数的实例组织要领,"带二个参数的组织要领被挪用"这个 字符串被打印。然后 b 被设置为 34,c 被设置为"经由历程 this 症结字挪用组织要领"。末了,代码掌握又返回 来实行带一个参数的实例组织要领体中的打印语句,"带一个参数的组织要领被挪用"这个字符串被打印。 至此,实例组织要领的实行终了。接下来的代码打印静态字段的值,能够看到两个实例打印出来的静态字段值是一样的,然则它们的实 例字段的值各不相同。
可选参数和定名参数也能够用于实例组织要领,下面看代码实例:
using System; namespace LycheeTest { class Program { private int b; private string c; public Program(int a = 12, string s = "") { this.b = a; this.c = s; } public void Show() { Console.WriteLine("实例字段 b 的值是:{0}", b); Console.WriteLine("实例字段 c 的值是:{0}", c); } static void Main(string[] args) { Program p1 = new Program(); //组织要领的两个参数都采纳默许值 Program p2 = new Program(34); //组织要领的 string 范例参数采纳默许值 Program p3 = new Program(23, "Hello World"); //组织要领的两个参数采纳传入参数 Program p4 = new Program(s: "本日的天气真好"); //采纳定名参数,另一个参数 a 采纳默许值 p1.Show(); p2.Show(); p3.Show(); p4.Show(); Console.ReadKey(); } } }
代码的第 6 行定义了一个带有可选参数和定名参数的组织要领,然后第 15 建立了一个类的实例,在组织要领中没有传入任何参数,这时候,组织要领的两个参数都采纳默许值。第 16 行代码为组织要领传入了一个 int 范例的参数,这时候,另一个 string 范例的参数采纳默许值。 第 17 行代码传入了两个参数,组织要领的两个参数都运用了这两个传入的参数。第 18 行代码运用了定名参数指定传入的参数是 string 范例的参数,并将它传递给形参 s。这时候另一 个 int 范例的参数采纳默许值。第 19 行到第 23 行代码打印类的实例字段的值。这段代码的实行效果以下:
实例字段 b 的值是:12 实例字段 c 的值是: 实例字段 b 的值是:34 实例字段 c 的值是: 实例字段 b 的值是:23 实例字段 c 的值是:Hello World 实例字段 b 的值是:12 实例字段 c 的值是:本日的天气真好
以上就是详解c#类的组织要领及示例代码的细致内容,更多请关注ki4网别的相干文章!