在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
假设我开了一家烤鱼店,每当客人来点餐时,我就会用笔和纸记录这笔订单,并计算出每单的价格。以下是记录的订单: 单号:00001 上面所有的内容都需要手写,当客人多的时候很浪费时间,于是我就去打印店按照以下模板打印点餐单(即纸质订单): 单号: 这样每位客人点餐时,我就只需要写下客人点餐的内容即可。 在上面的例子中,我记录的每一笔订单都可以看作一个对象,这每一笔订单都有对应的值使之与其他订单不同,但是所有订单都具有相同的属性和行为,通过抽象出这些属性和行为得到点餐单,所以点餐单可以看作订单的类,反之对点餐单填充不同的值,可以得到不同的订单,也就是不同的对象。通过对上面的理解给类和对象下定义,类是具有相同状态和行为的一类事物,对象是一个客观存在且独一无二的个体。类和对象的关系:类是对对象的抽象,对象是对类的填充或实例化。
类的基本结构:访问修饰符 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 } 注:定义分部类的唯一要求是类型名称必须相同,并且必须定义在相同的命名空间中。 |
请发表评论