【C#】上级实验四

 

1、虚方法练习

 

设计一个控制台应用程序,定义一个Shape类,具体要求如下:

(1)类中定义2个私有字段长度(length)、宽度(breadth)。

(2)类中定义相应公有属性分别对应上述2个字段;

(3)类中定义可重载的构造函数初始化上述2个字段;

(4)定义1个默认构造函数;

(5)类中定义公有方法输出对象的长度、宽度等详细信息;

(6)类中定义虚方法Draw,输出当前图型类别。

(7)在main方法中测试Shape类及方法。

 

定义一个Box类,父类为Shape,具体要求如下:

(1)类中定义3个私有字段长度(length)、宽度(breadth)、高度(height);

(2)类中定义相应公有属性分别对应上述3个字段;

(3)类中定义可重载的构造函数初始化上述3个字段;

(4)定义1个默认构造函数;

(5)类中定义公有方法输出对象的长度、宽度、高度等详细信息;

(6)类中定义虚方法Draw,输出当前图型类别。

(7)在main方法中测试Box类及方法;

(8)在main方法中测试多态。

 

 

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 
  6 namespace MyProject
  7 {
  8     class Program
  9     {
 10         static void Main(string[] args)
 11         {
 12             #region 测试Shape类及方法
 13             /*  1、默认构造函数 对Length,breadth进行赋值
 14              *  2、利用属性进行输出后,再利用属性进行赋值
 15              *  3、最后利用ToString 输出对应的对象信息 
 16              */
 17             #endregion
 18 
 19             Shape s1 = new Shape(1, 2);
 20             Console.WriteLine("s1->Length:{0} , breadth:{1}",s1.Length,s1.Breadth);
 21             s1.Length = 3;
 22             s1.Breadth = 4;
 23             Console.WriteLine(s1);
 24 
 25             #region 测试Box类及方法
 26             /*  1、默认构造函数 对Length,breadth,height进行赋值
 27              *  2、利用属性进行输出后,再利用属性进行赋值
 28              *  3、最后利用ToString 输出对应的对象信息 
 29              */
 30             #endregion
 31 
 32             Box b1 = new Box(1, 2, 3);
 33             Console.WriteLine("b1->Length :{0}\tbreadth :{1}\theight :{2}",b1.Length,b1.Breadth,b1.Height);
 34             b1.Length = 3;
 35             b1.Breadth = 4;
 36             b1.Height = 5;
 37             Console.WriteLine(b1);
 38 
 39             #region 测试多态
 40             /*
 41              * 多态体现在,父指针,将子类实例化.
 42              */
 43             #endregion
 44             Shape b2 = new Box(2, 3, 4);
 45             Console.WriteLine(b2);
 46 
 47 
 48             #region 测试虚函数
 49             #endregion
 50             s1.Draw();
 51             b1.Draw();
 52         }
 53     }
 54     
 55     public class Shape
 56     {
 57         private int length;
 58         private int breadth;
 59 
 60         public int Length
 61         {
 62           get { return length; }
 63           set { length = value; }
 64         }
 65         public int Breadth
 66         {
 67           get { return breadth; }
 68           set { breadth = value; }
 69         }
 70 
 71         public Shape ( int length , int width)
 72         {
 73             this.Length = length;
 74             this.Breadth = Breadth; 
 75         }
 76         public Shape():this(0, 0) { }
 77         public override string ToString()
 78         {
 79             return string.Format("Shape -> length:{0}\t Breadth:{1}", Length, Breadth);
 80         }
 81         public virtual void Draw()
 82         {
 83             Console.WriteLine(" Draw -> Shape " + "Length :{0} , Breadth :{1} ",Length , Breadth );
 84         }
 85         #region 主要注释
 86         /*
 87          * 类中的字段属性封装
 88          * 构造函数 : 两参数,零参数
 89          * 重载ToString类
 90          */
 91         #endregion
 92     }
 93 
 94     public class Box : Shape
 95     {
 96         private int height;
 97 
 98         public int Height
 99         {
100             get { return height; }
101             set { height = value; }
102         }
103 
104         public Box(int length, int Breadth, int height):base(length, Breadth)
105         {
106             this.height = height;
107         }
108         public Box() : this(0, 0, 0) { }
109         public override string ToString()
110         {
111             return string.Format("Box -> length:{0}\t breadth:{1}\t height:{2}", Length, Breadth, Height);
112         }
113         public override void Draw()
114         {
115             Console.WriteLine(" Draw -> Shape " + "Length :{0} , Breadth :{1} , Height :{2}", Length, Breadth,Height);
116         }
117         #region Box类
118         /*
119          *  Box继承了Shape的所有结构
120          *
121          *  1、无法直接访问父类的字段,但可通过"属性"间接访问
122          *  2、在重载 构造函数时,可以直接调用父类的构造函数实现部分字段的赋值
123          *  
124          */
125         #endregion
126     }
127 }
虚方法练习

 

 


 

2IComparable接口练习

1)定义Car类,包含两个字段:name和price;

(2)Car类中包含相应的属性、构造函数及ToString方法;

(3)Car类继承接口IComparable,并实现CompareTo方法;

(4)在Main方法中,使用Array.Sort方法对Car数组拍序,
拍序依据姓名和价格升序排序,
拍序后输出当前数组所有成员。

 

 

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace Myproject
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             Car[] array = new Car[5];
14             array[0] = new Car("A", 90);
15             array[1] = new Car("S", 100);
16             array[2] = new Car("B", 80);
17             array[3] = new Car("b", 80);
18             array[4] = new Car("Z", 80);
19 
20             Console.WriteLine("Length {0}", array.Length);
21 
22             Console.WriteLine("待排序序列");
23             foreach (var item in array)
24             {
25                 Console.WriteLine(item);
26             }
27 
28             Array.Sort(array, 0, array.Length);
29 
30             Console.WriteLine("已排序序列");
31             foreach (var item in array)
32             {
33                 Console.WriteLine(item);
34             }
35 
36         }
37     }
38     public class Car : IComparable
39     {
40         string name;
41         int price;
42 
43         public string Name
44         {
45             get { return name; }
46             set { name = value; }
47         }
48 
49         public int Price
50         {
51             get { return price; }
52             set { price = value; }
53         }
54 
55         public Car(string name, int price)
56         {
57             this.name = name;
58             this.price = price;
59         }
60 
61         public Car() : this("", 0) { }
62         public override string ToString()
63         {
64             return string.Format("Car Name : {0} , Price : {1} ", Name, Price);
65         }
66 
67         public int CompareTo(Object obj)
68         {
69             //1、判断
70             if( obj == null)
71             {
72                 return 1;
73             }
74             //2、转换
75             Car rhs = obj as Car;
76             //3、判断
77             int r = 0;
78             if( rhs == null )
79             {
80                 throw new ArgumentException("Object is not a Car");
81             }
82             else
83             {
84                 r = this.price.CompareTo(rhs.price); 
85                 if ( r == 0)
86                 {
87                     return this.name.CompareTo(rhs.name); 
88                 }
89                 else
90                 {
91                     return r;
92                 }
93             }
94         }
95     }
96 }
Icomparable

 


 

3、接口练习,设计一个控制台应用程序,模拟银行存取款业务。具体要求如下:

1)定义一个接口IBankAccount,包含4个成员,

分别是
存款方法PayIn( )、
取款方法Withdraw( )、
转账方法TransferTo( )和
余额属性Banlance。

(2)定义一个类CurrentAccount,继承接口IBankAccount,并实现该接口所有成员。

(3)Main方法中调试并实现存款、取款、转账等操作。

 

 

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace Myproject
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             CurrentAccount c1 = new CurrentAccount("Tom", 10000);
14             Console.WriteLine( c1 );
15             c1.Payln(10000);
16             Console.WriteLine( c1 );
17 
18             CurrentAccount c2 = new CurrentAccount("Jerry", 0);
19             c1.TransferTo(c2, 5000);
20 
21             Console.WriteLine( c1 );
22             Console.WriteLine( c2 );
23         }
24     }
25 
26     public interface IBankAccount
27     {
28         decimal Balance { get; }
29         decimal Payln(decimal x);
30         bool Withdraw(decimal x);
31         bool TransferTo(IBankAccount target ,decimal x);
32     }
33 
34     public class CurrentAccount : IBankAccount
35     {
36         private string id;
37         private decimal balance;
38 
39         public CurrentAccount (string id , decimal x)
40         {
41             this.id = id;
42             this.balance = x;
43         }
44 
45         public CurrentAccount() : this("NA", 0) { }
46         public decimal Balance
47         {
48             get { return balance; }
49         }
50 
51         public decimal Payln(decimal x)
52         {
53             balance += x ;
54             return balance;
55         }
56 
57         public bool Withdraw(decimal x)
58         {
59             if (balance >= x)
60             {
61                 balance -= x;
62                 return true;
63             }
64             else return false;
65         }
66 
67         public bool TransferTo(IBankAccount target , decimal x)
68         {
69             if( Withdraw(x))
70             {
71                 target.Payln(x);
72                 return true;
73             }
74             else return false;
75         }
76 
77         public override string ToString()
78         {
79             return string.Format("{0} : {1}", id, balance);
80         }
81 
82     }
83 }
CurrentAccount类

 

posted @ 2019-10-25 20:52  Osea  阅读(811)  评论(0编辑  收藏  举报