zoukankan      html  css  js  c++  java
  • part01.01 C#基础语法与逻辑控制(四)(6. C# 类)

    C# 类

    类的声明

     1  /// <summary>
     2     /// 学校教学班
     3     /// </summary>
     4     public class SchoolClass
     5     {
     6         //public Guid ID = Guid.NewGuid();    // 属性的直接处理方式
     7         public Guid ID { get; set; }    //  教学班标识符,唯一标识符
     8         public string Name { get; set; }    //  教学班名称
     9         public string Description { get; set; }     //  教学班简要说明
    10         public string SortCode { get; set; }    //  业务编码
    11         public DateTime CreateTime { get; set; }    //  创建日期
    12         public GradeEnum Grade { get; set; }    //  归属年级
    13         public bool IsActive { get; set; }      //  是否为在校教学班(否表示已不是)
    14 
    15         public SchoolClass()
    16         {
    17             this.ID = Guid.NewGuid();
    18         }
    19     }
    20 
    21  /// <summary>
    22     /// 学生
    23     /// </summary>
    24     public class Student
    25     {
    26         public Guid ID { get; set; }                   // 唯一标识符
    27         public string Name { get; set; }               // 学生姓名
    28         public string Description { get; set; }        // 简要说明
    29         public string SortCode { get; set; }           // 学号
    30         public bool Sex { get; set; }                  // 性别
    31         public DateTime BirthDay { get; set; }         // 出生日期
    32         public string Origin { get; set; }             // 籍贯
    33 
    34         public SchoolClass SchoolClass { get; set; }   // 归属的教学班
    35 
    36  /// <summary>
    37         /// 构造函数,创建实例并为标识符赋值
    38         /// </summary>
    39         public Student()
    40         {
    41             this.ID = Guid.NewGuid();          
    42         }
    43 }
    44 
    45  /// <summary>
    46     /// 年级
    47     /// </summary>
    48     public enum GradeEnum
    49     {
    50         初一, 初二, 初三,
    51         高一, 高二, 高三
    52     }
    View Code

    对象:类的实例化

     1 /// <summary>
     2     /// 演示类和对象构建的一般方法
     3     /// </summary>
     4     class Program
     5     {
     6         static void Main(string[] args)
     7         {
     8 
     9             #region 传统的创建业务实体对象的写法
    10             Student student01 = new Student();
    11 
    12             student01.Name = "张文华";
    13             student01.Description = "张文华的简要说明";
    14             student01.SortCode = "20160901H001";
    15             student01.Sex = true;
    16             student01.BirthDay = DateTime.Parse("1990-08-18");
    17             student01.Origin = "广西桂林";
    18             #endregion
    19 
    20             #region 现代的创建业务实体对象的写法
    21             var student02 = new Student()
    22             {
    23                 Name = "张文华",
    24                 Description = "张文华的简要说明",
    25                 SortCode = "20160901H001",
    26                 Sex = true,
    27                 BirthDay = DateTime.Parse("1990-08-18"),
    28                 Origin = "广西桂林"
    29             }; 
    30             #endregion
    31        }
    32 }    
    View Code

    类属性的修饰符

    private 和 readonly 的简要说明

    属性的直接处理方式(注:partial 是定义局部类的关键字,下面会做详细的解释)

    字段的属性的概念

    (字段)

    (属性)

     构造函数重构

     1  /// <summary>
     2         /// 构造函数,创建实例并为标识符赋值
     3         /// </summary>
     4         public Student()
     5         {
     6             this.ID = Guid.NewGuid();
     7             #region 在构造函数中可以为私有变量和只读变量赋值
     8             //this._PrivateInformation01 = "隐私性质的信息01";
     9             //this._PrivateInformation02 = "隐私性质的信息01";
    10             //this._ReadOnlyInformation = "只读性质的信息";
    11             #endregion
    12         }
    13     
    14         /// <summary>
    15         /// 重载构造函数,直接为属性赋值
    16         /// </summary>
    17         /// <param name="name"></param>
    18         /// <param name="description"></param>
    19         /// <param name="sortcode"></param>
    20         /// <param name="sex"></param>
    21         /// <param name="birthday"></param>
    22         /// <param name="origin"></param>
    23         public Student(string name,string description, string sortcode, bool sex, DateTime birthday, string origin)
    24         {
    25             this.ID = Guid.NewGuid();
    26             this.Name = name;
    27             this.Description = description;
    28             this.SortCode = sortcode;
    29             this.Sex = sex;
    30             this.BirthDay = birthday;
    31             this.Origin = origin;
    32         }
    View Code

    静态类和和静态方法

    静态类基本和非静态类相同,但存在一个差异:静态类无法实例化,就是无法使用 new 关键字创建类类型的变量,由于不存在任何实例变量,因此可以使用类名本身访问静态类成员

    具体代码如下:

      1  /// <summary>
      2     /// 对学生数据进行持久化处理的常规方法
      3     /// </summary>
      4     public static class DataStore
      5     {
      6         /// <summary>
      7         /// 保存 student 对象数据
      8         /// </summary>
      9         /// <param name="employee"></param>
     10         public static void Save(Student student)
     11         {
     12             //  使用 student 对象的 ID+dat 作为数据存储的文件名,保存对象数据
     13             var stream = new FileStream(student.ID + "dat", FileMode.Create);
     14             //  通过 StreamWriter 对象将传入的 employee 数据存储到前面创建的文件中
     15             using (var writer = new StreamWriter(stream))
     16             {
     17                 writer.WriteLine(student.ID);
     18                 writer.WriteLine(student.Name);
     19                 writer.WriteLine(student.Description);
     20                 writer.WriteLine(student.SortCode);
     21                 writer.WriteLine(student.Sex);
     22                 writer.WriteLine(student.BirthDay);
     23                 writer.WriteLine(student.Origin);
     24                 if (student.SchoolClass != null)
     25                     writer.WriteLine(student.SchoolClass.Name);
     26 
     27                 writer.Close();     //  关闭文件流
     28             }
     29         }
     30 
     31         /// <summary>
     32         /// 从存储数据的文件中读取数据并转换为相应的 Student 对象
     33         /// </summary>
     34         /// <param name="id">对象的 id </param>
     35         /// <returns></returns>
     36         public static Student Get(Guid id)
     37         {
     38             var student = new Student();
     39             var stream = new FileStream(id.ToString() + "dat", FileMode.Open);
     40             //  通过 StreamReader 读取文件数据,赋值到对象相关属性
     41             using(var reader=new StreamReader(stream))
     42             {
     43                 student.ID = Guid.Parse(reader.ReadLine());
     44                 student.Name = reader.ReadLine();
     45                 student.Description = reader.ReadLine();
     46                 student.SortCode = reader.ReadLine();
     47                 student.Sex = Boolean.Parse(reader.ReadLine());
     48                 student.BirthDay = DateTime.Parse(reader.ReadLine());
     49                 student.Origin = reader.ReadLine();
     50                 reader.Close();
     51                 return student;
     52                
     53               
     54             }
     55         }
     56 
     57         /// <summary>
     58         /// 初始化一批教学班数据,供程序使用
     59         /// </summary>
     60         /// <returns></returns>
     61         public static List<SchoolClass> CreateSchoolClassCollection()
     62         {
     63             var schoolClassCollection = new List<SchoolClass>();
     64 
     65             var sc01 = new SchoolClass()
     66             {
     67                 Name = "高一1班",
     68                 Description = "关于高一1班的说明",
     69                 SortCode = "20170901H",
     70                 CreateDate = DateTime.Parse("2017-09-01"),
     71                 GradeEnum = GradeEnum.高一,
     72                 IsActive = true
     73             };
     74             schoolClassCollection.Add(sc01);
     75 
     76             var sc02 = new SchoolClass()
     77             {
     78                 Name = "高一2班",
     79                 Description = "关于高一2班的说明",
     80                 SortCode = "20170902H",
     81                 CreateDate = DateTime.Parse("2017-09-01"),
     82                 GradeEnum = GradeEnum.高一,
     83                 IsActive = true
     84             };
     85             schoolClassCollection.Add(sc02);
     86 
     87             var sc03 = new SchoolClass()
     88             {
     89                 Name = "高一3班",
     90                 Description = "关于高一3班的说明",
     91                 SortCode = "20170903H",
     92                 CreateDate = DateTime.Parse("2017-09-01"),
     93                 GradeEnum = GradeEnum.高一,
     94                 IsActive = true
     95             };
     96             schoolClassCollection.Add(sc03);
     97 
     98             var sc04 = new SchoolClass()
     99             {
    100                 Name = "高二1班",
    101                 Description = "关于高二1班的说明",
    102                 SortCode = "20160901H",
    103                 CreateDate = DateTime.Parse("2016-09-01"),
    104                 GradeEnum = GradeEnum.高二,
    105                 IsActive = true
    106             };
    107             schoolClassCollection.Add(sc04);
    108 
    109             var sc05 = new SchoolClass()
    110             {
    111                 Name = "高二2班",
    112                 Description = "关于高一1班的说明",
    113                 SortCode = "20160902H",
    114                 CreateDate = DateTime.Parse("2016-09-01"),
    115                 GradeEnum = GradeEnum.高二,
    116                 IsActive = true
    117             };
    118             schoolClassCollection.Add(sc05);
    119 
    120             var sc06 = new SchoolClass()
    121             {
    122                 Name = "高二3班",
    123                 Description = "关于高二3班的说明",
    124                 SortCode = "20170903H",
    125                 CreateDate = DateTime.Parse("2016-09-01"),
    126                 GradeEnum = GradeEnum.高二,
    127                 IsActive = true
    128             };
    129             schoolClassCollection.Add(sc06);
    130 
    131             return schoolClassCollection;
    132         }
    133     }
    View Code

     扩展方法(针对 Student 类的扩展(动态编程))

     1  /// <summary>
     2     /// 针对 Student 类的扩展(动态编程)
     3     /// </summary>
     4     public static class StudentExtension
     5     {
     6         /// <summary>
     7         /// 打印学生数据到控制台
     8         /// </summary>
     9         /// <param name="student">学生对象</param>
    10         public static void Print(this Student student)
    11         {
    12             Console.WriteLine(student.ToString());
    13         }
    14     }
    View Code

    特殊的类(内嵌类、局部类)

    内嵌类

     

    相关代码

     1   /// <summary>
     2     /// 学生
     3     /// </summary>
     4     public class Student
     5     {
     6         public Guid ID { get; set; }                   // 唯一标识符
     7         public string Name { get; set; }               // 学生姓名
     8         public string Description { get; set; }        // 简要说明
     9         public string SortCode { get; set; }           // 学号
    10         public bool Sex { get; set; }                  // 性别
    11         public DateTime BirthDay { get; set; }         // 出生日期
    12         public string Origin { get; set; }             // 籍贯
    13 
    14         public SchoolClass SchoolClass { get; set; }   // 归属的教学班
    15 
    16         //private string _PrivateInformation01;          // 私有变量01
    17         //private string _PrivateInformation02 { get; }  // 私有变量02,并且只能读取
    18         //readonly string _ReadOnlyInformation;          // 只读性质的信息
    19 
    20         /// <summary>
    21         /// 构造函数,创建实例并为标识符赋值
    22         /// </summary>
    23         public Student()
    24         {
    25             this.ID = Guid.NewGuid();
    26             #region 在构造函数中可以为私有变量和只读变量赋值
    27             //this._PrivateInformation01 = "隐私性质的信息01";
    28             //this._PrivateInformation02 = "隐私性质的信息01";
    29             //this._ReadOnlyInformation = "只读性质的信息";
    30             #endregion
    31         }
    32     
    33         /// <summary>
    34         /// 重载构造函数,直接为属性赋值
    35         /// </summary>
    36         /// <param name="name"></param>
    37         /// <param name="description"></param>
    38         /// <param name="sortcode"></param>
    39         /// <param name="sex"></param>
    40         /// <param name="birthday"></param>
    41         /// <param name="origin"></param>
    42         public Student(string name,string description, string sortcode, bool sex, DateTime birthday, string origin)
    43         {
    44             this.ID = Guid.NewGuid();
    45             this.Name = name;
    46             this.Description = description;
    47             this.SortCode = sortcode;
    48             this.Sex = sex;
    49             this.BirthDay = birthday;
    50             this.Origin = origin;
    51         }
    52 
    53         /// <summary>
    54         /// 将对象数据格式化处理,可以用于前端显示
    55         /// </summary>
    56         /// <returns></returns>
    57         public override string ToString()
    58         {
    59             //this._PrivateInformation01 = "更新后的隐私信息";   
    60             //this._PrivateInformation02 = "更新后的隐私信息";   // 不能在方法中更新只读私有变量
    61             //this._ReadOnlyInformation = "更新后的只读信息";    // 不能在方法中更新只读变量
    62 
    63             var sexString = "";
    64             if (!this.Sex)
    65                 sexString = "";
    66             var birthday = this.BirthDay.ToLongDateString();
    67 
    68             var result = string.Format("学生数据: 	{0} 	{1} 	{2} 	{3} 	{4} 	{5}", this.ID, this.Name, this.SortCode, sexString, birthday, this.Origin);
    69             return result;
    70         }
    71 
    72         /// <summary>
    73         /// 内嵌类:联系方式
    74         /// </summary>
    75         public class Contact
    76         {
    77             public string Mobile { get; set; }
    78             public string EMail { get; set; }
    79             public string QQ { get; set; }
    80         }
    81     }
    View Code

    局部类

    相关代码

     1  /// <summary>
     2     /// 教师
     3     /// </summary>
     4     public partial class Teacher
     5     {
     6         public Guid ID { get; set; }              // 唯一标识符
     7         public string Name { get; set; }          // 教师姓名
     8         public string Description { get; set; }   // 简要说明
     9         public string SortCode { get; set; }      // 工号
    10         public bool Sexe { get; set; }            // 性别
    11         public DateTime BirthDay { get; set; }    // 出生日期
    12         public string Origin { get; set; }        // 籍贯
    13 
    14         public Teacher()
    15         {
    16             this.ID = Guid.NewGuid();
    17         }
    18     }
    19     /// <summary>
    20     /// 作为 Teacher 局部类,补充类 Teacher 的属性或方法
    21     /// </summary>   
    22     public partial class Teacher
    23     {
    24         public DateTime JoiningDate { get; set; }   //  入职时间
    25     }
    View Code
  • 相关阅读:
    Eclipse护眼技巧
    Maven搭建SSM框架(Spring+SpringMVC+MyBatis)
    Spring之各jar包作用
    Maven新建web项目jsp报错
    js金额转大写(万元为单位)
    linux常用指令
    ie8下数组不支持indexOf方法解决方法
    string,stringBuffer,stringBuilder的比较
    input限制输入
    spring boot Mybatis --maven
  • 原文地址:https://www.cnblogs.com/huangzewei/p/7278459.html
Copyright © 2011-2022 走看看