C#

  1 using System;
  2

/*------------------------------------------------------------------------------------------------------------
* 结构体:
* 1. 结构体中不可以为字段赋值(初始化);
* 2. 结构体中一直存在隐式的无参构造函数, 不能显示的
*   定义无参构造函数;
* 3. 结构体的构造函数中必须要为所有的字段赋值
* 4. 创建结构体对象可以不适用new()关键字,而类则必须
*   使用new()关键字
* 5. 结构体不能继承, 但能实现接口
* 6. 结构体是值类型
* 7. 结构体不能定义析构函数
* 8. 不能使用关键字: abstract / sealed 来修饰结构体;
------------------------------------------------------------------------------------------------------------*/

  3 namespace struct_enum
  4 {
  5     /// <枚举类型enum>
  6     /// enum: 值类型
  7     ///     1.数据直接存储在栈中
  8     ///     2.默认枚举中的第一个变量被赋值为0,其他的变量的值按定义的顺序来递增(0,1,2,3,4...)
  9     ///     3.enum枚举类型的变量的名字不能相同,但是值可以相同,
 10     ///     4.如果enum中的部分成员显式定义了值,那么没有定义值的成员还是会按照上一个成员的值来递增赋值.
 11     ///     5.enum枚举成员可以用来作为位标志,同时支持位的操作(位与,位或等等)
 12     ///     enum CardDeckSettings : uint  
 13     ///     {  
 14     ///         SingleDeck = 0x01,         //Bit 0  
 15     ///         LargePictures = 0x02,       //Bit 1  
 16     ///         FancyNumbers = 0x04,      //Bit 2  
 17     ///         Animation = 0x08         //Bit 3      
 18     ///     }  
 19     /// </枚举类型enum>
 20     public enum Gender
 21     {
 22         男,
 23  24     }
 25 
 26     //=====================================================================================
 27 
 28     /// <struct>
 29     /// struct: 值类型(类是引用类型)
 30     ///     1.直接继承自【System.ValueType】(继承自【System.Object】),不需要显示的指定;
 31     ///     2.结构可以声明构造函数,但它们必须带参数;不能包含显式的无参数构造函数,
 32     ///     3.与类不同,结构的实例化可以不使用【new】运算符。;
 33     ///     4.结构的继承列表中只允许有接口,结构可以实现接口,一个结构不能从另一个结构或类继承,而且不能作为一个类的基;
 34     ///     5.结构在定义变量时不能给定初始值; 36     /// </struct>
 37     public struct Person
 38     {
 39         public string strName;
 40         public int nBirthday;
 41         public Gender gender;
 42     }
 43 
 44     public struct Person2
 45     {
 46         // 构造函数: 必须带参数 且必须加上【:this()】
 47         public Person2(string name, Gender gd, int nBd) : this()
 48         {
 49             strName = name;
 50             nBirthday = nBd;
 51             gender = gd;
 52             
 53         }
 54 
 55         public string strName { get; private set; }
 56         public int nBirthday { get; private set;}
 57         public Gender gender { get; private set; }
 58 
 59         public void fnTestPerson2(Person2 ps2)
 60         {
 61             Console.Write("
测试 Person2: ");
 62             Console.WriteLine("姓名: {0} , {1}, {2}", ps2.strName, ps2.gender, ps2.nBirthday);
 63             Console.WriteLine("
---------------------------------------");
 64         }
 65 
 66     }
 67 
 68     public struct Person3
 69     {
 70         // 姓名
 71         private string name;
 72         public string strName
 73         {
 74             get     // 获取私有成员name的值
 75             {
 76                 return this.name;
 77             }
 78 
 79             set     // 给私有成员name赋值
 80             {
 81                 this.name = value;      // this代表person3的实例化对象
 82             }
 83         }
 84 
 85         // 年龄
 86         //private int age;       // 私有
 87         public int nAge       // 对外公开
 88         {
 89             get; // 简写,相当于: get { return this.birthday; }
 90             set; // 简写,相当于: set { return this.birthday = value; }
 91         }
 92 
 93         // 性别
 94         //private Gender gender;
 95         public Gender GENDER
 96         {
 97             get;
 98             set;
 99         }
100 
101         public void fnTestPerson3(string strName, Gender gender, int nAge)
102         {
103             Console.Write("
测试 Person3: ");
104             Console.WriteLine("姓名: {0} , {1}, {2}", strName, gender, nAge);
105         }
106     }
107 
108     class Program
109     {
110         static void Main(string[] args)
111         {
112             // 测试Person
113             fnTestPerson();
114 
115             // 测试Person2
116             Person2 person2 = new Person2("小丽", Gender.女, DateTime.Now.Year - new DateTime(1980, 01, 06).Year);
117             person2.fnTestPerson2(person2);
118 
119             // 测试Person3
120             Person3 person3 = new Person3();  // struct中有set/get访问器,则Person3实例化时必须new(),否则报错:error CS0165: 使用了未赋值的局部变量
121             person3.strName = "小王";         // 通过set访问器给私有成员name赋值,通过get访问器获取name的值
122             person3.GENDER = Gender.男;
123             person3.nAge = 35;
124             person3.fnTestPerson3(person3.strName, person3.GENDER, person3.nAge);
125 
126             Console.ReadLine();
127 
128         }
129 
130         // 测试Person
131         public static void fnTestPerson()
132         {
133             Person person;
134             person.strName = "小明";      // 对其成员赋值
135             person.gender = Gender.男;
136             person.nBirthday = DateTime.Now.Year - new DateTime(2010, 08, 09).Year;
137 
138             Console.Write("
测试 Person: ");
139             Console.WriteLine("姓名: {0} , {1}, {2}", person.strName, person.gender, person.nBirthday);
140             Console.WriteLine("
---------------------------------------");
141         }
142     }
143 }

原文地址:https://www.cnblogs.com/DuanLaoYe/p/5247825.html