zoukankan      html  css  js  c++  java
  • C#类类型

    一、类和对象

      假设我开了一家烤鱼店,每当客人来点餐时,我就会用笔和纸记录这笔订单,并计算出每单的价格。以下是记录的订单:

    单号:00001
    种类:清江鱼
    口味:香辣
    配菜:豆腐
    价格:140元
    ------------
    单号:00002
    种类:江团
    口味:蒜香
    配菜:海带
    价格:180元

    上面所有的内容都需要手写,当客人多的时候很浪费时间,于是我就去打印店按照以下模板打印点餐单(即纸质订单):

    单号:
    种类:
    口味:
    配菜:
    价格:

    这样每位客人点餐时,我就只需要写下客人点餐的内容即可。

    在上面的例子中,我记录的每一笔订单都可以看作一个对象,这每一笔订单都有对应的值使之与其他订单不同,但是所有订单都具有相同的属性和行为,通过抽象出这些属性和行为得到点餐单,所以点餐单可以看作订单的类,反之对点餐单填充不同的值,可以得到不同的订单,也就是不同的对象。通过对上面的理解给类和对象下定义,类是具有相同状态和行为的一类事物,对象是一个客观存在且独一无二的个体。类和对象的关系:类是对对象的抽象,对象是对类的填充或实例化。

      类的基本结构:访问修饰符 class 类名{ },其中大括号里可以是类型成员(常量、字段、属性、构造函数、方法、事件等)中的一种或多种构成。

      对象的基本结构是类的实例化:类名 变量名 = new 类名();,其中变量名也叫对象。

      下面我们根据上面的例子设计对应的类,并实现相应的对象。(为使代码简单,访问修饰符均用public)

     1 /// <summary>
     2 /// 拥有单号、种类、口味、配菜、价格和计算价格行为的订单类
     3 /// </summary>
     4 public class Order
     5 {
     6     #region 字段
     7     /// <summary>
     8     /// 单号(单号为自增字段,无需赋值,自增代码省略)
     9     /// </summary>
    10     public int orderNo;
    11 
    12     /// <summary>
    13     /// 种类
    14     /// </summary>
    15     public string type;
    16 
    17     /// <summary>
    18     /// 口味
    19     /// </summary>
    20     public string flavor;
    21 
    22     /// <summary>
    23     /// 配菜
    24     /// </summary>
    25     public string garnish;
    26 
    27     /// <summary>
    28     /// 价格
    29     /// </summary>
    30     public decimal price;
    31     #endregion
    32 
    33     #region 方法
    34     /// <summary>
    35     /// 计算价格
    36     /// </summary>
    37     /// <param name="type">鱼的种类</param>
    38     /// <param name="garnish">配菜种类</param>
    39     public void CalculateThePrice(string type, string garnish)
    40     {
    41         //通过鱼的种类和配菜种类计算价格,过程省略
    42     }
    43     #endregion
    44 }
    45 /// <summary>
    46 /// 实现对象的类
    47 /// </summary>
    48 public class RealizeObject
    49 {
    50     #region 方法
    51     /// <summary>
    52     /// 实现
    53     /// </summary>
    54     public void Realize()
    55     {
    56         //清江鱼香辣味加豆腐配菜需要140元的订单对象
    57         Order order = new Order();
    58         order.type = "清江鱼";
    59         order.flavor = "香辣";
    60         order.garnish = "豆腐";
    61         order.price = 140;//直接赋予价格
    62         order.CalculateThePrice("清江鱼", "豆腐");//通过行为计算价格
    63 
    64         //江团酱香味加海带配菜需要180元的订单对象
    65         Order orderTwo = new Order();
    66         orderTwo.type = "江团";
    67         orderTwo.flavor = "酱香";
    68         orderTwo.garnish = "海带";
    69         orderTwo.price = 180;//直接赋予价格
    70         orderTwo.CalculateThePrice("江团", "海带");//通过行为计算价格
    71     }
    72     #endregion
    73 }

      详解类的实例化过程:Order order = new Order();等号前半部分定义一个类型为Order的变量order,这个变量的值为null;当加上等号后半部分时,才给order变量赋值,并且Order的构造函数会为order的所有字段赋默认值。用点餐单的例子讲当没有等号后半部分时,我想把一张白纸order用作点餐单,但我还没有去打印,当加上等号后半部分后,order这张白纸被我打印成了点餐单,并且我可能在打印完后立马填充对应的值。

    二、类和对象相关语法

    1、对象初始化语法:使用默认构造函数创建对象并设置对象数据值的简写形式。代码如下:

     1 public class Garnish { }
     2 public class Order
     3 {
     4     /// <summary>
     5     /// 种类
     6     /// </summary>
     7     public string Type { get; set; }
     8 
     9     /// <summary>
    10     /// 口味
    11     /// </summary>
    12     public string Flavor { get; set; }
    13 
    14     /// <summary>
    15     /// 配菜
    16     /// </summary>
    17     public string Garnish { get; set; }
    18 
    19     /// <summary>
    20     /// 价格
    21     /// </summary>
    22     public decimal Price { get; set; }
    23 
    24     /// <summary>
    25     /// 其他配菜
    26     /// </summary>
    27     public Garnish OtherGarnish { get; set; }
    28 
    29     public Order() { }
    30 
    31     public Order(string type, string flavor, string garnish)
    32     {
    33         Type = type;
    34         Flavor = flavor;
    35         Garnish = garnish;
    36     }
    37 }
    38 public class RealizeObject
    39 {
    40     public void Realize()
    41     {
    42         //清江鱼香辣味加豆腐配菜需要140元的订单对象
    43         //传统方式如下:
    44         Order order = new Order();
    45         order.Type = "清江鱼";
    46         order.Flavor = "香辣";
    47         order.Garnish = "豆腐";
    48         order.Price = 140;//直接赋予价格
    49         //对象初始化语法如下:
    50         Order order = new Order//也可以加上(),显式调用默认构造函数
    51         {
    52             Type = "清江鱼",
    53             Flavor = "香辣",
    54             Garnish = "豆腐",
    55             Price = 140
    56         };
    57 
    58         //江团酱香味加海带配菜需要180元的订单对象
    59         //传统方式如下:
    60         Order orderTwo = new Order("江团", "酱香", "海带");
    61         orderTwo.Price = 180;//直接赋予价格
    62         //调用自定义构造函数的对象初始化语法如下:
    63         Order orderTwo = new Order("江团", "酱香", "海带")
    64         {
    65             Price = 180
    66         };
    67 
    68         //在Order类中包含其他类型的属性时,对象初始化语法也可以嵌套使用
    69         Order orderThree = new Order
    70         {
    71             OtherGarnish = new Garnish { }
    72         };
    73     }
    74 }

    2、部分类型:当一个类的代码过长时,可以通过partial关键字把这个类分割成两个甚至更多(物理文件分割成多个,逻辑上还是一个),一般会把不变的部分和可变的部分分割开来。

     1 /// <summary>
     2 /// 不变的部分
     3 /// </summary>
     4 public partial class Order
     5 {
     6     //字段
     7 
     8     //构造函数
     9 }
    10 /// <summary>
    11 /// 可变的部分
    12 /// </summary>
    13 public partial class Order
    14 {
    15     //属性
    16 
    17     //方法
    18 }

    注:定义分部类的唯一要求是类型名称必须相同,并且必须定义在相同的命名空间中。

  • 相关阅读:
    vue中富文本编辑框
    vue中生成二维码
    在ABP中使用linq
    js根据年月得到当前这个月总共有多少天
    mescroll在vue中的应用
    javascript积累
    javascript常用的操作
    情侣间常犯的7个沟通问题
    欧洲旅游六大最佳目的地
    见与不见
  • 原文地址:https://www.cnblogs.com/yaojieyuan/p/11244233.html
Copyright © 2011-2022 走看看