PS:注释和讲解全在代码中
1. 嵌套类、匿名类与密封类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace C4_程序设计
{
public enum Col
{
Red, Green, Blue, Yellow
}
public sealed class Point //被sealed声明的类为密封类,不可被继承,和C++中的final修饰符功能一致
{
public int x, y;
public Point(int x=0, int y=0)
{
this.x = x;
this.y = y;
}
// 嵌套类型可以自由访问外层类型的成员,而不在乎那些成员是否私有,外层类型如果想访问嵌套类型,则要受到访问规则的限制
public class State //除此之外,和外层类不同的是,嵌套类可以为private或protected的
{
public double val;
private Col col;
public State()
{
val = 1.0;
//枚举若不初始化则默认为第一个元素
}
public Col SetCol
{
get { return col; }
set { col = value; }
}
}
//如果嵌套类型是private或protected,嵌套类型对外层类型以外的其它类型是不可访问的,外层类型和在外层类型中的另一个嵌套类型却可以访问它,但是无法使用它的private或protected成员
//如果嵌套类型中的成员设置为public或者internal,那么外层类型和其它同一个外层类型声明的嵌套类型可以访问嵌套类型的这些成员,但这些成员对外层类型以外的类型依旧隐藏
}
/*class Text : Point
{ 错误,不可继承
}*/
class 嵌套类与匿名类
{
static void Main()
{
Point me = new Point();
//me.val = 5 错误,不能这样访问嵌套类里的内容
Point.State you = new Point.State();
Console.WriteLine(you.val);
Console.WriteLine(you.SetCol);
you.SetCol = Col.Yellow;
Console.WriteLine(you.SetCol);
var p = new { Name = "hautcds", Age = 18 }; //匿名类的定义
Console.WriteLine(p.Name);
//以上就是匿名类的唯一使用方法,匿名类一般用于存储一组只读属性,既然是匿名类,当然“没有名字”
//p.Age = 18; 错误,匿名类只读
}
}
}
//其实一般来讲,匿名类和嵌套类都很少被使用