1.枚举(人为限定取值范围的整数)
class Program
{
static void Main(string[] args)
{
var employee = new Person
{
Level = Level.Employee
};
var boss = new Person
{
Level = Level.Boss
};
Console.WriteLine(boss.Level > employee.Level);
// True
Console.WriteLine((int)Level.Employee);// 0
Console.WriteLine((int)Level.Manager); // 100
Console.WriteLine((int)Level.Boss); // 200
Console.WriteLine((int)Level.BigBoss); // 201
}
}
enum Level
{
Employee,
Manager = 100,
Boss = 200,
BigBoss,
}
class Person
{
public int Id { get; set; }
public string Name { get; set; }
public Level Level { get; set; }
}
2.枚举高级用法
class Program
{
static void Main(string[] args)
{
var employee = new Person
{
Name = "Timothy",
Skill = Skill.Drive | Skill.Cook | Skill.Program | Skill.Teach
};
Console.WriteLine(employee.Skill); // 15
// 过时用法不推荐
//Console.WriteLine((employee.Skill & Skill.Cook) == Skill.Cook); // True
// .NET Framework 4.0 后推荐的用法
Console.WriteLine((employee.Skill.HasFlag(Skill.Cook))); // True
}
}
[Flags]
enum Skill
{
Drive = 1,
Cook = 2,
Program = 4,
Teach = 8,
}
class Person
{
public int Id { get; set; }
public string Name { get; set; }
public Skill Skill { get; set; }
}
3.struct:结构体是值类型,没有引用只有复制。
class Program
{
static void Main(string[] args)
{
var stu1 = new Student { Id = 101, Name = "Timothy" };
// 结构体赋值是值复制
var stu2 = stu1;
stu2.Id = 1001;
stu2.Name = "Michael";
Console.WriteLine($"#{stu1.Id} Name:{stu1.Name}");
// #101 Name:Timothy
}
}
struct Student
{
public int Id { get; set; }
public string Name { get; set; }
}
4.struct接口
class Program
{
static void Main(string[] args)
{
var stu1 = new Student { Id = 101, Name = "Timothy" };
stu1.Speak();
}
}
interface ISpeak
{
void Speak();
}
struct Student : ISpeak
{
public int Id { get; set; }
public string Name { get; set; }
public void Speak()
{
Console.WriteLine($"I'm #{Id} student {Name}");
}
}
学习用途,侵权立删;
参考文献