0505.Net基础班第十三天(面向对象多态)

1、c#中的访问修饰符 public :公开的公共的 private:私有的,只能在当前类的内部访问 protected:受保护的,只能在当前类的内部以及该类的子类中访问。 internal:只能在当前项目中访问。在同一个项目中,internal和public的权限是一样。 protected internal:protected+internal

1)、能够修饰类的访问修饰符只有两个:public、internal。 2)、可访问性不一致。 子类的访问权限不能高于父类的访问权限,会暴漏父类的成员。

2、设计模式 设计这个项目的一种方式。

3、简单工厂设计模式

4、值类型在复制的时候,传递的是这个值得本身。    引用类型在复制的时候,传递的是对这个对象的引用。    5、序列化:就是将对象转换为二进制    反序列化:就是将二进制转换为对象    作用:传输数据。   序列化:   1)、将这个类标记为可以被序列化的。     6、partial部分类

7、sealed密封类 不能够被其他类继承,但是可以继承于其他类。

8、接口 [public] interface I..able {  成员; }

接口是一种规范。 只要一个类继承了一个接口,这个类就必须实现这个接口中所有的成员

为了多态。 接口不能被实例化。 也就是说,接口不能new(不能创建对象)

接口中的成员不能加“访问修饰符”,接口中的成员访问修饰符为public,不能修改。

(默认为public) 接口中的成员不能有任何实现(“光说不做”,只是定义了一组未实现的成员)。

接口中只能有方法、属性、索引器、事件,不能有“字段”和构造函数。

接口与接口之间可以继承,并且可以多继承。

接口并不能去继承一个类,而类可以继承接口  (接口只能继承于接口,而类既可以继承接口,也可以继承类)

实现接口的子类必须实现该接口的全部成员。

一个类可以同时继承一个类并实现多个接口,如果一个子类同时继承了父类A,并实现了接口IA,那么语法上A必须写在IA的前面。

class MyClass:A,IA{},因为类是单继承的。

显示实现接口的目的:解决方法的重名问题 什么时候显示的去实现接口: 当继承的借口中的方法和参数一摸一样的时候,要是用显示的实现接口

当一个抽象类实现接口的时候,需要子类去实现接口。

01复习

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.Threading.Tasks;
  6 using System.IO;
  7 namespace _01复习
  8 {
  9     class Program
 10     {
 11         static void Main(string[] args)
 12         {
 13             /*
 14              泛型集合
 15              * List<T>
 16              * Dictionary<T,T>
 17              * 装箱和拆箱
 18              * 装箱:将值类型转换为引用类型
 19              * 拆箱:将引用类型转换为值类型
 20              * 我们应该尽量避免在代码中发生装箱或者拆箱
 21              * 文件流
 22              * FileStream StreamReader和StreamWriter
 23              * 多态:虚方法、
 24              * //抽象类、接口
 25              * 虚方法:
 26              * 抽象类:
 27
 28              */
 29             List<int> list = new List<int>();
 30
 31             //Dictionary<int, string> dic = new Dictionary<int, string>();
 32             //dic.Add(1, "张三");
 33             //dic[2] = "李四";
 34             //foreach (KeyValuePair<int,string> kv in dic)
 35             //{
 36             //    Console.WriteLine("{0}-----{1}",kv.Key,kv.Value);
 37             //}
 38             //Console.ReadKey();
 39
 40             //File  FileStream StreamReader StreamWriter
 41             //using (FileStream fsRead = new FileStream("0505远程版机器码.txt", FileMode.OpenOrCreate, FileAccess.Read))
 42             //{
 43             //    byte[] buffer = new byte[1024 * 1024 * 5];
 44             //    //本次读取实际读取到的字节数
 45             //    int r = fsRead.Read(buffer, 0, buffer.Length);
 46
 47             //    //将字节数组中的每个元素按照我们指定的编码格式解析成字符串
 48             //    string s = Encoding.Default.GetString(buffer, 0, r);
 49             //    Console.WriteLine(s);
 50             //}
 51             //Console.ReadKey();
 52
 53             using (FileStream fsWrite = new FileStream(@"new.txt", FileMode.OpenOrCreate, FileAccess.Write))
 54             {
 55                 string s = "abc";
 56                 byte[] buffer = Encoding.UTF8.GetBytes(s);
 57                 fsWrite.Write(buffer, 0, buffer.Length);
 58             }
 59             Console.WriteLine("OK");
 60             Console.ReadKey();
 61
 62
 63
 64
 65
 66
 67             //虚方法和抽象类
 68
 69             //老师可以起立  学生也可以起立  校长也可以起立
 70
 71             //声明父类去指定子类对象
 72
 73             Person p = new HeadMaster();//new Teacher();//new Student();
 74             p.StandUp();
 75             Console.ReadKey();
 76
 77         }
 78     }
 79
 80
 81     public abstract class Person
 82     {
 83         public abstract void StandUp();
 84     }
 85
 86     public class Student : Person
 87     {
 88         public override void StandUp()
 89         {
 90             Console.WriteLine("学生起立,说老师好");
 91         }
 92     }
 93
 94
 95     public class Teacher : Person
 96     {
 97         public override void StandUp()
 98         {
 99             Console.WriteLine("老师起立,说校长好");
100         }
101     }
102
103     public class HeadMaster : Person
104     {
105         public override void StandUp()
106         {
107             Console.WriteLine("校长起来说领导好");
108         }
109     }
110
111
112
113 }

02访问修饰符

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace _02访问修饰符
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             Person p = new Person();
14         }
15     }
16
17     public class Person
18     {
19         //protected string _name;
20         //public int _age;
21         //private char _gender;
22         //internal int _chinese;
23         //protected internal int _math;
24     }
25
26     public class Student : Person
27     {
28
29     }
30
31     //public class Student:Person
32     //{
33
34     //}
35 }

03简单工厂设计模式

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace _03简单工厂设计模式
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             Console.WriteLine("请输入您想要的笔记本品牌");
14             string brand = Console.ReadLine();
15             NoteBook nb = GetNoteBook(brand);
16             nb.SayHello();
17             Console.ReadKey();
18         }
19
20
21         /// <summary>
22         /// 简单工厂的核心 根据用户的输入创建对象赋值给父类
23         /// </summary>
24         /// <param name="brand"></param>
25         /// <returns></returns>
26         public static NoteBook GetNoteBook(string brand)
27         {
28             NoteBook nb = null;
29             switch (brand)
30             {
31                 case "Lenovo": nb = new Lenovo();
32                     break;
33                 case "IBM": nb = new IBM();
34                     break;
35                 case "Acer": nb = new Acer();
36                     break;
37                 case "Dell": nb = new Dell();
38                     break;
39             }
40             return nb;
41         }
42     }
43
44     public abstract class NoteBook
45     {
46         public abstract void SayHello();
47     }
48
49     public class Lenovo : NoteBook
50     {
51         public override void SayHello()
52         {
53             Console.WriteLine("我是联想笔记本,你联想也别想");
54         }
55     }
56
57
58     public class Acer : NoteBook
59     {
60         public override void SayHello()
61         {
62             Console.WriteLine("我是鸿基笔记本");
63         }
64     }
65
66     public class Dell : NoteBook
67     {
68         public override void SayHello()
69         {
70             Console.WriteLine("我是戴尔笔记本");
71         }
72     }
73
74     public class IBM : NoteBook
75     {
76         public override void SayHello()
77         {
78             Console.WriteLine("我是IBM笔记本");
79         }
80     }
81 }

04值类型和引用类型

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace _04值类型和引用类型
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             //值类型:int double char decimal bool enum struct
14             //引用类型:string 数组  自定义类 集合 object 接口
15
16             //值传递和引用传递
17             //int n1 = 10;
18             //int n2 = n1;
19             //n2 = 20;
20             //Console.WriteLine(n1);
21             //Console.WriteLine(n2);
22             //Console.ReadKey();
23
24             //Person p1 = new Person();
25             //p1.Name = "张三";
26             //Person p2 = p1;
27             //p2.Name = "李四";
28             //Console.WriteLine(p1.Name);
29             //Console.ReadKey();
30
31             //Person p = new Person();
32             //p.Name = "张三";
33             //Test(p);
34             //Console.WriteLine(p.Name);
35             //Console.ReadKey();
36
37             string s1 = "张三";
38             string s2 = s1;
39             s2 = "李四";
40             Console.WriteLine(s1);
41             Console.WriteLine(s2);
42             Console.ReadKey();
43
44             int number = 10;
45             TestTwo(ref  number);
46             Console.WriteLine(number);
47             Console.ReadKey();
48         }
49         //int n=number;
50         public static void TestTwo(ref  int n)
51         {
52             n += 10;
53         }
54
55         //Person pp=p;
56         public static void Test(Person pp)
57         {
58             Person p = pp;
59             p.Name = "李四";
60         }
61     }
62
63     public class Person
64     {
65         private string _name;
66         public string Name
67         {
68             get { return _name; }
69             set { _name = value; }
70         }
71     }
72 }

05序列化和反序列化

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 using System.IO;
 7 using System.Runtime.Serialization.Formatters.Binary;
 8 namespace _05序列化和反序列化
 9 {
10     class Program
11     {
12         static void Main(string[] args)
13         {
14             //要将p这个对象 传输给对方电脑
15             //Person p = new Person();
16             //p.Name = "张三";
17             //p.Age = 19;
18             //p.Gender = ‘男‘;
19             //using (FileStream fsWrite = new FileStream(@"C:\Users\SpringRain\Desktop\111.txt", FileMode.OpenOrCreate, FileAccess.Write))
20             //{
21             //    //开始序列化对象
22             //    BinaryFormatter bf = new BinaryFormatter();
23             //    bf.Serialize(fsWrite, p);
24             //}
25             //Console.WriteLine("序列化成功");
26             //Console.ReadKey();
27
28             //接收对方发送过来的二进制 反序列化成对象
29             Person p;
30             using (FileStream fsRead = new FileStream(@"C:\Users\SpringRain\Desktop\111.txt", FileMode.OpenOrCreate, FileAccess.Read))
31             {
32                 BinaryFormatter bf = new BinaryFormatter();
33                 p = (Person)bf.Deserialize(fsRead);
34             }
35             Console.WriteLine(p.Name);
36             Console.WriteLine(p.Age);
37             Console.WriteLine(p.Gender);
38             Console.ReadKey();
39         }
40     }
41
42
43     [Serializable]
44     public class Person
45     {
46         private string _name;
47
48         public string Name
49         {
50             get { return _name; }
51             set { _name = value; }
52         }
53
54
55         private char _gender;
56
57         public char Gender
58         {
59             get { return _gender; }
60             set { _gender = value; }
61         }
62
63         private int _age;
64
65         public int Age
66         {
67             get { return _age; }
68             set { _age = value; }
69         }
70     }
71 }

06部分类

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace _06部分类
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13         }
14     }
15
16     public partial class Person
17     {
18         private string _name;
19         public void Test()
20         {
21
22         }
23     }
24
25     public partial class Person
26     {
27         public void Test(string name)
28         {
29            // _name
30         }
31     }
32 }

07密封类

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace _07密封类
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13
14         }
15     }
16
17     public sealed class Person:Test
18     {
19
20     }
21
22     public class Test
23     {
24
25     }
26 }

08重写ToString()方法

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace _08重写ToString__方法
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             Person p = new Person();
14             Console.WriteLine(p.ToString());
15             Console.ReadKey();
16         }
17     }
18
19     public class Person
20     {
21         public override string ToString()
22         {
23             return "Hello World";
24         }
25     }
26 }

09接口

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace _09接口
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             //接口就是一个规范、能力。
14         }
15     }
16
17     public class Person
18     {
19         public void CHLSS()
20         {
21             Console.WriteLine("我是人类,我可以吃喝拉撒睡");
22         }
23     }
24     public class NBAPlayer
25     {
26         public void KouLan()
27         {
28             Console.WriteLine("我可以扣篮");
29         }
30     }
31
32     public class Student : Person,IKouLanable
33     {
34         public void KouLan()
35         {
36             Console.WriteLine("我也可以扣篮");
37         }
38     }
39
40
41     public interface IKouLanable
42     {
43         void KouLan();
44     }
45
46 }

10接口的语法特征

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace _10接口的语法特征
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13
14         }
15     }
16
17     public interface IFlyable
18     {
19         //接口中的成员不允许添加访问修饰符 ,默认就是public
20         void Fly();
21         string Test();
22         //不允许写具有方法体的函数
23
24      //   string _name;
25          string Name
26         {
27             get;
28             set;
29         }
30
31     }
32 }

11、自动属性和普通属性

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace _11_自动属性和普通属性
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13         }
14     }
15     public class Person
16     {
17         private string _name;
18
19         public string Name
20         {
21             get { return _name; }
22             set { _name = value; }
23         }
24
25         /// <summary>
26         /// 自动属性
27         /// </summary>
28         public int Age
29         {
30             get;
31             set;
32         }
33     }
34 }

12接口特点

 1  using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace _12接口特点
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             IFlyable fly = new Bird();//new Person();// new IFlyable();
14             fly.Fly();
15             Console.ReadKey();
16         }
17     }
18     public class Person:IFlyable
19     {
20         public void Fly()
21         {
22             Console.WriteLine("人类在飞");
23         }
24     }
25
26
27     public class Student:Person, IFlyable
28     {
29         public void Fly()
30         {
31             Console.WriteLine("人类在飞");
32         }
33     }
34
35     public class Bird : IFlyable
36     {
37         public void Fly()
38         {
39             Console.WriteLine("鸟在飞");
40         }
41     }
42
43     public interface IFlyable
44     {
45         //不允许有访问修饰符 默认为public
46         //方法、自动属性
47         void Fly();
48     }
49
50
51
52     public interface M1
53     {
54         void Test1();
55     }
56
57     public interface M2
58     {
59         void Test2();
60     }
61
62     public interface M3
63     {
64         void Test3();
65     }
66
67
68     public interface SupperInterface : M1, M2, M3
69     {
70
71     }
72
73     public class Car : SupperInterface
74     {
75
76         public void Test1()
77         {
78             throw new NotImplementedException();
79         }
80
81         public void Test2()
82         {
83             throw new NotImplementedException();
84         }
85
86         public void Test3()
87         {
88             throw new NotImplementedException();
89         }
90     }
91
92 }

13接口练习

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace _13接口练习
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             //麻雀会飞  鹦鹉会飞  鸵鸟不会飞 企鹅不会飞  直升飞机会飞
14             //用多态来实现
15             //需方法、抽象类、接口
16
17
18             IFlyable fly = new Plane();//new MaQue();//new YingWu();
19             fly.Fly();
20             Console.ReadKey();
21
22
23         }
24     }
25
26     public class Bird
27     {
28         public double Wings
29         {
30             get;
31             set;
32         }
33         public void EatAndDrink()
34         {
35             Console.WriteLine("我会吃喝");
36         }
37     }
38
39     public class MaQue : Bird,IFlyable
40     {
41
42         public void Fly()
43         {
44             Console.WriteLine("麻雀会飞");
45         }
46     }
47
48     public class YingWu : Bird, IFlyable,ISpeak
49     {
50
51
52         public void Fly()
53         {
54             Console.WriteLine("鹦鹉会飞");
55         }
56
57         public void Speak()
58         {
59             Console.WriteLine("鹦鹉可以学习人类说话");
60         }
61     }
62
63
64     public class TuoBird : Bird
65     {
66
67     }
68
69     public class QQ : Bird
70     {
71
72     }
73
74
75     public class Plane : IFlyable
76     {
77         public void Fly()
78         {
79             Console.WriteLine("直升飞机转动螺旋桨飞行");
80         }
81     }
82
83
84
85     public interface IFlyable
86     {
87         void Fly();
88
89     }
90
91     public interface ISpeak
92     {
93         void Speak();
94     }
95
96
97 }

14、显示实现接口

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace _14_显示实现接口
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             //显示实现接口就是为了解决方法的重名问题
14             IFlyable fly = new Bird();
15             fly.Fly();
16             Bird bird = new Bird();
17             bird.Fly();
18
19             Console.ReadKey();
20         }
21     }
22
23
24     public class Bird : IFlyable
25     {
26         public void Fly()
27         {
28             Console.WriteLine("鸟飞会");
29         }
30         /// <summary>
31         /// 显示实现接口
32         /// </summary>
33         // void IFlyable.Fly()
34         //{
35         //    Console.WriteLine("我是接口的飞");
36         //}
37
38     }
39
40     public interface IFlyable
41     {
42         void Fly();
43     }
44 }

15、总结

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace _15_总结
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             //什么时候用虚方法来实现多态?
14             //什么使用用抽象类来实现多态?
15             //什么时候用接口来实现多态?
16
17             //真的鸭子会游泳 木头鸭子不会游泳 橡皮鸭子会游泳
18
19             ISwimming swim = new XPDuck();//new RealDuck();
20             swim.Swim();
21             RealDuck rd = new RealDuck();
22             rd.Swim();
23             RealDuck xd = new XPDuck();
24             xd.Swim();
25             Console.ReadKey();
26         }
27     }
28
29     public class RealDuck:ISwimming
30     {
31
32         public virtual void Swim()
33         {
34             Console.WriteLine("真的鸭子靠翅膀游泳");
35         }
36     }
37
38     public class MuDuck
39     {
40
41     }
42
43     public class XPDuck : RealDuck, ISwimming
44     {
45
46         public override void Swim()
47         {
48             Console.WriteLine("橡皮鸭子飘着游泳");
49         }
50     }
51
52     public interface ISwimming
53     {
54         void Swim();
55     }
56 }

16超市收银系统

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace _16超市收银系统
 8 {
 9     class Acer:ProductFather
10     {
11         public Acer(string id, double price, string Name)
12             : base(id, price, Name)
13         {
14
15         }
16     }
17 }

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace _16超市收银系统
 8 {
 9     class Banana : ProductFather
10     {
11         public Banana(string id, double price, string Name)
12             : base(id, price, Name)
13         {
14
15         }
16     }
17 }

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace _16超市收银系统
 8 {
 9
10     /// <summary>
11     /// 打折的父类
12     /// </summary>
13     abstract class CalFather
14     {
15
16         /// <summary>
17         /// 计算打折后应付多少钱
18         /// </summary>
19         /// <param name="realMoney">打折前应付的价钱</param>
20         /// <returns>打折后应付的前</returns>
21         public abstract double GetTotalMoney(double realMoney);
22     }
23 }

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace _16超市收银系统
 8 {
 9
10     /// <summary>
11     /// 买M元 送N元
12     /// </summary>
13     class CalMN:CalFather
14     {
15         //买500送100
16         public double M
17         {
18             get;
19             set;
20         }
21
22         public double N
23         {
24             get;
25             set;
26         }
27
28         public CalMN(double m, double n)
29         {
30             this.M = m;
31             this.N = n;
32         }
33         public override double GetTotalMoney(double realMoney)
34         {
35             //600 -100
36             //1000-200
37             //1200
38             if (realMoney >= this.M)
39             {
40                 return realMoney - (int)(realMoney / this.M) * this.N;
41             }
42             else
43             {
44                 return realMoney;
45             }
46         }
47     }
48 }

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace _16超市收银系统
 8 {
 9
10     /// <summary>
11     /// 不打折 该多少钱就多少钱
12     /// </summary>
13     class CalNormal:CalFather
14     {
15         public override double GetTotalMoney(double realMoney)
16         {
17             return realMoney;
18         }
19     }
20 }

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace _16超市收银系统
 8 {
 9     /// <summary>
10     /// 按折扣率打折
11     /// </summary>
12     class CalRate:CalFather
13     {
14
15         /// <summary>
16         /// 折扣率
17         /// </summary>
18         public double Rate
19         {
20             get;
21             set;
22         }
23
24         public CalRate(double rate)
25         {
26             this.Rate = rate;
27         }
28         public override double GetTotalMoney(double realMoney)
29         {
30             return realMoney * this.Rate;
31         }
32     }
33 }

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace _16超市收银系统
 8 {
 9     class CangKu
10     {
11
12         List<List<ProductFather>> list = new List<List<ProductFather>>();
13
14
15
16         /// <summary>
17         ///向用户展示货物
18         /// </summary>
19         public void ShowPros()
20         {
21             foreach (var item in list)
22             {
23                 Console.WriteLine("我们超市有:" + item[0].Name + "," + "\t" + "有" + item.Count + "个," + "\t" + "每个" + item[0].Price + "元");
24             }
25         }
26         //list[0]存储Acer电脑
27         //list[1]存储三星手机
28         //list[2]存储酱油
29         //list[3]存储香蕉
30         /// <summary>
31         /// 在创建仓库对象的时候 像仓库中添加货架
32         /// </summary>
33         public CangKu()
34         {
35             list.Add(new List<ProductFather>());
36             list.Add(new List<ProductFather>());
37             list.Add(new List<ProductFather>());
38             list.Add(new List<ProductFather>());
39         }
40         /// <summary>
41         /// 进货
42         /// </summary>
43         /// <param name="strType">货物的类型</param>
44         /// <param name="count">货物的数量</param>
45         public void JinPros(string strType, int count)
46         {
47             for (int i = 0; i < count; i++)
48             {
49                 switch (strType)
50                 {
51                     case "Acer": list[0].Add(new Acer(Guid.NewGuid().ToString(), 1000, "宏基笔记本"));
52                         break;
53                     case "SamSung": list[1].Add(new SamSung(Guid.NewGuid().ToString(), 2000, "棒之手机"));
54                         break;
55                     case "JiangYou": list[2].Add(new JiangYou(Guid.NewGuid().ToString(), 10, "老抽酱油"));
56                         break;
57                     case "Banana": list[3].Add(new Banana(Guid.NewGuid().ToString(), 50, "大香蕉"));
58                         break;
59                 }
60             }
61         }
62         /// <summary>
63         /// 从仓库中提取货物
64         /// </summary>
65         /// <param name="strType"></param>
66         /// <param name="count"></param>
67         /// <returns></returns>
68         public ProductFather[] QuPros(string strType, int count)
69         {
70             ProductFather[] pros = new ProductFather[count];
71             for (int i = 0; i < pros.Length; i++)
72             {
73                 switch (strType)
74                 {
75                     case "Acer":
76                         pros[i] = list[0][0];
77                         list[0].RemoveAt(0);
78                         break;
79                     case "SamSung": pros[i] = list[1][0];
80                         list[1].RemoveAt(0);
81                         break;
82                     case "JiangYou": pros[i] = list[2][0];
83                         list[2].RemoveAt(0);
84                         break;
85                     case "Banana": pros[i] = list[3][0];
86                         list[3].RemoveAt(0);
87                         break;
88                 }
89             }
90             return pros;
91         }
92
93
94     }
95 }

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace _16超市收银系统
 8 {
 9     class JiangYou:ProductFather
10     {
11         public JiangYou(string id, double price, string Name)
12             : base(id, price, Name)
13         {
14
15         }
16     }
17 }

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace _16超市收银系统
 8 {
 9     class ProductFather
10     {
11         public double Price
12         {
13             get;
14             set;
15         }
16
17         public string Name
18         {
19             get;
20             set;
21         }
22
23         public string ID
24         {
25             get;
26             set;
27         }
28
29         public ProductFather(string id, double price, string Name)
30         {
31             this.ID = id;
32             this.Price = price;
33             this.Name = Name;
34         }
35     }
36 }

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace _16超市收银系统
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             //创建超市对象
14             SupperMarket sm = new SupperMarket();
15             //展示货物
16             sm.ShowPros();
17             //跟用户交互
18             sm.AskBuying();
19             Console.ReadKey();
20         }
21     }
22 }

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace _16超市收银系统
 8 {
 9     class SamSung:ProductFather
10     {
11         public SamSung(string id, double price, string Name)
12             : base(id, price, Name)
13         {
14
15         }
16     }
17 }

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.Threading.Tasks;
  6
  7 namespace _16超市收银系统
  8 {
  9     class SupperMarket
 10     {
 11         //创建仓库对象
 12         CangKu ck = new CangKu();
 13         /// <summary>
 14         /// 创建超市对象的时候,给仓库的货架上导入货物
 15         /// </summary>
 16         public SupperMarket()
 17         {
 18             ck.JinPros("Acer", 1000);
 19             ck.JinPros("SamSung", 1000);
 20             ck.JinPros("JiangYou", 1000);
 21             ck.JinPros("Banana", 1000);
 22         }
 23
 24
 25         /// <summary>
 26         /// 跟用户交互的过程
 27         /// </summary>
 28         public void AskBuying()
 29         {
 30             Console.WriteLine("欢迎观临,请问您需要些什么?");
 31             Console.WriteLine("我们有 Acer、SamSung、Jiangyou、Banana");
 32             string strType = Console.ReadLine();
 33             Console.WriteLine("您需要多少?");
 34             int count = Convert.ToInt32(Console.ReadLine());
 35             //去仓库取货物
 36             ProductFather[] pros = ck.QuPros(strType, count);
 37             //下面该计算价钱了
 38             double realMoney = GetMoney(pros);
 39             Console.WriteLine("您总共应付{0}元", realMoney);
 40             Console.WriteLine("请选择您的打折方式 1--不打折 2--打九折  3--打85 折  4--买300送50  5--买500送100");
 41             string input = Console.ReadLine();
 42             //通过简单工厂的设计模式根据用户的舒服获得一个打折对象
 43             CalFather cal = GetCal(input);
 44             double totalMoney = cal.GetTotalMoney(realMoney);
 45             Console.WriteLine("打完折后,您应付{0}元", totalMoney);
 46             Console.WriteLine("以下是您的购物信息");
 47             foreach (var item in pros)
 48             {
 49                 Console.WriteLine("货物名称:"+item.Name+","+"\t"+"货物单价:"+item.Price+","+"\t"+"货物编号:"+item.ID);
 50             }
 51
 52         }
 53
 54
 55
 56
 57
 58
 59
 60         /// <summary>
 61         /// 根据用户的选择打折方式返回一个打折对象
 62         /// </summary>
 63         /// <param name="input">用户的选择</param>
 64         /// <returns>返回的父类对象 但是里面装的是子类对象</returns>
 65         public CalFather GetCal(string input)
 66         {
 67             CalFather cal = null;
 68             switch (input)
 69             {
 70                 case "1": cal = new CalNormal();
 71                     break;
 72                 case "2": cal = new CalRate(0.9);
 73                     break;
 74                 case "3": cal = new CalRate(0.85);
 75                     break;
 76                 case "4": cal = new CalMN(300, 50);
 77                     break;
 78                 case "5": cal = new CalMN(500, 100);
 79                     break;
 80             }
 81             return cal;
 82         }
 83
 84
 85
 86
 87         /// <summary>
 88         /// 根据用户买的货物计算总价钱
 89         /// </summary>
 90         /// <param name="pros"></param>
 91         /// <returns></returns>
 92         public double GetMoney(ProductFather[] pros)
 93         {
 94             double realMoney = 0;
 95             //realMoney = pros[0].Price * pros.Length;
 96
 97             for (int i = 0; i < pros.Length; i++)
 98             {
 99                 realMoney += pros[i].Price;
100
101                 // realMoney = pros[i] * pros.Length;
102             }
103             return realMoney;
104         }
105
106
107
108
109         public void ShowPros()
110         {
111             ck.ShowPros();
112         }
113
114     }
115 }

17GUID

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace _17GUID
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             //产生一个不会重复的编号
14             Console.WriteLine(Guid.NewGuid().ToString());
15             Console.WriteLine(Guid.NewGuid().ToString());
16             Console.WriteLine(Guid.NewGuid().ToString());
17             Console.WriteLine(Guid.NewGuid().ToString());
18             Console.WriteLine(Guid.NewGuid().ToString());
19             Console.ReadKey();
20         }
21     }
22 }

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace _17GUID
 8 {
 9     class SamSung
10     {
11     }
12 }

时间: 2024-10-20 20:52:45

0505.Net基础班第十三天(面向对象多态)的相关文章

0505.Net基础班第十二天(面向对象多态)

1.绝对路径和相对路径 绝对路径:通过给定的这个路径直接能在我的电脑中找到这个文件. 相对路径:文件相对于应用程序的路径. 结论: 我们在开发中应该去尽量的使用相对路径. 2.装箱.拆箱 装箱:就是将值类型转换为引用类型. 拆箱:将引用类型转换为值类型. 看两种类型是否发生了装箱或者拆箱,要看,这两种类型是否存在继承关系. 3.将创建文件流对象的过程写在using当中,会自动的帮助我们释放流所占用的资源. 4.实现多态的手段 1).虚方法 步骤: 1.将父类的方法标记为虚方法 ,使用关键字 vi

0505.Net基础班第九天(面向对象处级)

1.面向过程-----> 面向对象 面向过程:面向的是完成这件事儿的过程,强调的是完成这件事儿的动作. 把大象塞进冰箱里 1.打开冰箱门 2.把大象塞进去,亲下大象的屁股 3.关闭冰箱门 孙全 瘦小 矮  小屌丝 孙全踩着小板凳打开冰箱门 孙全找翟盼盼帮忙把大象塞进冰箱里,孙全踩着板凳去亲. 孙全踩着板凳关闭冰箱门 翟盼盼  190cm  非常大力气 1.翟自己就能打开冰箱门 2.翟自己将大象塞进冰箱里,翟可以自己亲一下. 3.翟自己关闭冰箱门 如果我们用面向过程的思想来解决这件事儿,当执行这件

0505.Net基础班第二十一天(基础加强总复习)

1.取消播放器的自动播放功能 2.播放或者暂停按钮 3.下一曲.上一曲 4.多选删除 5.静音和放音 6.选择列表中的音乐文件,单击播放按钮直接播放 7.自动进行下一曲 15秒  44秒 当我和世界不一样 44.--47 那就让我不一样 lblInfomation.Text = musicPlayer.currentMedia.duration.ToString() + "\r\n" + musicPlayer.currentMedia.durationString + "\

0505.Net基础班第二十天(基础加强总复习)

1.new关键字 1).创建对象 2).隐藏从父类那里继承过来的成员 2.访问修饰符 public:公开的,公共的 private:私有的,只能在当前类的内部访问,类中成员们,如果不加访问修饰符,默认就是private procteced:受保护的,可以在当前类的内部访问,也可以在该类的子类中访问 internal:在当前项目中都可以访问. protected internal: 能够修饰类的访问修饰符只有两个,internal和public 3.常用的关键字 this 1.当前类的对象 2.调

0505.Net基础班第十天(面向对象继承)

1.命名空间 可以认为类是属于命名空间的. 如果在当前项目中没有这个类的命名空间,需要我们手动的导入这个类所在的 命名空间. 1).用鼠标去点 2).alt+shift+F10 3).记住命名空间,手动的去引用 2.在一个项目中引用另一个项目的类 1).添加引用 2).引用命名空间 3.值类型和引用类型 区别: 1.值类型和引用类型在内存上存储的地方不一样. 2.在传递值类型和传递引用类型的时候,传递的方式不一样. 值类型我们称之为值传递,引用类型我们称之为引用传递. 我们学的值类型和引用类型:

0505.Net基础班第十一天(面向对象继承)

1.里氏转换 1).子类可以赋值给父类 2).如果父类中装的是子类对象,那么可以讲这个父类强转为子类对象. 2. 子类对象可以调用父类中的成员,但是父类对象永远都只能调用自己的成员. 3. is:表示类型转换,如果能够转换成功,则返回一个true,否则返回一个false as:表示类型转换,如果能够转换则返回对应的对象,否则返回一个null 4.protected 受保护的:可以在当前类的内部以及该类的子类中访问. 5.ArrayList集合的长度问题 每次集合中实际包含的元素个数(count)

0505.Net 基础班第十七天(GDI绘图)

基础知识复习+练习(带*为选做) 以下练习题做的时候如果遇到不会做的,请跳过本题继续向后做. 编写一段程序,运行时向用户提问“你考了多少分?(0~100)”,接受输入后判断其等级并显示出来.判断依据如下:等级={优 (90~100分):良 (80~89分):中 (60~69分):差 (0~59分):} 编程输出九九乘法表. 定义长度50的数组,随机给数组赋值,并可以让用户输入一个数字n,按一行n个数输出数组  int[]  array = new int[50];     Random r =

0505.Net基础班第二十二天(委托、XML和播放器项目)

01索引器 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace _01索引器 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 Person p = new Person(); 14 p

0505.Net基础班第十四天(winform基础)

1.winform应用程序是一种智能客户端技术,我们可以使用winform应用程序 帮助我们获得信息或者传输信息等. 2.属性 Name:在后台要获得前台的控件对象,需要使用Name属性. visible:指示一个控件是否可见. Enabled:指示一个控件是否可用. 3.事件:发生一件事情. 注册事件:双击控件注册的都是控件默认被选中的那个事件. 触发事件: 4. 在Main函数当中创建的窗体对象,我们称之为这个窗体应用程序的主窗体. 也就意味着,当你将主窗体关闭后,整个应用程序都关闭了. 5