最近在看java一方面的书籍,看到一个很奇怪的问题,java类中还可以再定义一个类,这种结构非常特殊!后来才发现我知识浅薄了,原来C#中也有内部类,之前都一直没有注意过这个语法结构!
使用内部类有这样几个好处:
(1)抽象外部类的某一状态下的行为,隐藏实现,通过修改该内的访问修饰符,可以设置仅有外部类可以访问该类
(2)扩展了命名空间,可以将外部类的类名作为内部类的一个命名空间(这里只是相当于,但不是真正的命名空间)
(3)内部类可以当作外部类的一个扩展,可以活的更好的封装。
上面的这些特点胡乱的总结了一下,可能有些词不达意,下面有些具体例子:
1.内部类的定义:
嵌套类:在一个类中定义另外一个类,主要分为静态嵌套类和非静态嵌套类(又称之为"内部类")
内部类的定义结构:(1)在一个类中直接定义类(2)在一个方法中定义类(3)匿名内部类
2.外部类访问内部类
1 namespace GameStatistical.Test.InnerClass
2 {
3 public class Person
4 {
5 public class Student
6 {
7 public static int age;
8 internal static int height;
9 private static string sex;
10
11 public virtual void Show()
12 {
13 Console.WriteLine("年龄:"+age);
14 Console.WriteLine("身高:"+height);
15 }
16
17 internal void Display()
18 {
19 Console.WriteLine("internal");
20 Console.WriteLine("年龄:" + age);
21 Console.WriteLine("身高:" + height);
22 }
23 }
24
25
26 public void Show()
27 {
28 Student.age = 21;
29 Student.height = 75;
30 Student student = new Student();
31 student.Show();
32 student.Display();
33 }
34 }
35 }
2 {
3 public class Person
4 {
5 public class Student
6 {
7 public static int age;
8 internal static int height;
9 private static string sex;
10
11 public virtual void Show()
12 {
13 Console.WriteLine("年龄:"+age);
14 Console.WriteLine("身高:"+height);
15 }
16
17 internal void Display()
18 {
19 Console.WriteLine("internal");
20 Console.WriteLine("年龄:" + age);
21 Console.WriteLine("身高:" + height);
22 }
23 }
24
25
26 public void Show()
27 {
28 Student.age = 21;
29 Student.height = 75;
30 Student student = new Student();
31 student.Show();
32 student.Display();
33 }
34 }
35 }