• 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 }

  • 相关阅读:
    期待Eclipse3.4
    Winforms中使用系统托盘图标
    Eclipse下的Struts2开发插件
    彩色 夺冠
    网络&系统
    A Famous Music Composer
    Quick Brown Fox
    解密QQ号——队列
    谁先倒
    bootstrap Table从零开始
  • 原文地址:https://www.cnblogs.com/DuanLaoYe/p/5247825.html
Copyright © 2020-2023  润新知