1.用WinForm作出窗口在屏幕上移动的效果
操作:在窗口上拖控件Time(组件),设置Time属性Enabled(启用)为ture,Interal(间距)为20,在事件里双击。
窗口移动 public partial class Form1 : Form { public Form1() { InitializeComponent(); StartPosition = FormStartPosition.Manual;//指定窗口初始位置,Manual是指由Location属性决定 Location = new Point(0, 0);//指定位置为坐标(0,0),这个坐标指的是窗体左上角坐标 } int seed1 = 2; int seed2 = 2;//设定2个种子,决定X,Y坐标碰到边的时候进行转向。 private void timer1_Tick(object sender, EventArgs e) { int X = Location.X; int Y = Location.Y; if(X>=Screen.GetWorkingArea(new Point(0,0)).Width-Width||X<0) { seed1=seed1*(-1); } else if (Y >= Screen.GetWorkingArea(new Point(0, 0)).Height - Height||Y<0) { seed2 = seed2 * (-1);//Screen.GetWorkingArea是指屏幕的工作区域 } Location=new Point(X+seed1,Y+seed2); } private void Form1_Load(object sender, EventArgs e) { } }
2.多态的一个练习(难点)题目问输出是什么
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
多态namespace _13多态的一个练习 { class A { public string Str = "A"; public void Show() { Console.WriteLine("Show A"); } } class B : A { public string Str = "B"; //B隐藏了父类A的Str属性 public virtual void Show() { Console.WriteLine("Show B"); } //B隐藏了自己的方法 } class C : B { //C继承了B的公开属性Str="B"; public override void Show() { Console.WriteLine("Show C"); } //C重写了父类B的方法 } class D : C { public string Str = "D"; //D继承C,系统默认的隐藏了C的方法和属性 public void Show() { Console.WriteLine("Show D"); } } class Program { static void Main(string[] args) { D d = new D(); // 在这里,将子类D用里氏直接赋值给A,B,C C c = d; //D本身有自己的方法和字段,直接输出 则 “D”, "Show D" B b = d; //C没有自己的Str,继承了父类B,而方法则为override 则输出 “B“,"Show C" A a = d; //B有自己的Str,但是隐藏了自己的方法,由C进行重写 则为 "B","SHOW C" Console.WriteLine(d.Str); // D //A有自己的Str和方法,则为 "A", "Show A" Console.WriteLine(c.Str); // B Console.WriteLine(b.Str); // B Console.WriteLine(a.Str); // A Console.WriteLine("------------"); d.Show(); // D c.Show(); // C b.Show(); // C *** a.Show(); // A Console.ReadLine(); } } }
3.计算器设计(多态,工厂模式,面向对象的理解)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
计算器class Factory {// public static Operation GetOpertation(string oper, double num1, double num2) { switch(oper) { case "+": return new Add(num1, num2); case "-": return new Sub(num1, num2); case "*": return new Mul(num1, num2); case "/": return new Div(num1, num2); default: return null; } } } namespace 计算器练习 { abstract class Operation { public abstract double Operate(); double num1; public double Num1 { get { return num1; } set { num1 = value; } } double num2; public double Num2 { get { return num2; } set { num2 = value; } } } class Add : Operation { public Add(double num1, double num2) { this.Num1 = num1; this.Num2 = num2; } public override double Operate() { return Num1 + Num2; } } class Sub : Operation { public Sub(double num1, double num2) { this.Num1 = num1; this.Num2 = num2; } public override double Operate() { return Num1 - Num2; } } class Mul : Operation { public Mul(double num1, double num2) { this.Num1 = num1; this.Num2 = num2; } public override double Operate() { return Num1 * Num2; } } class Div : Operation { public Div(double num1, double num2) { this.Num1 = num1; this.Num2 = num2; } public override double Operate() { if (Num2 == 0) { Console.WriteLine("除数不能为0"); } return Num1 / Num2; } } } class Program { static void Main(string[] args) { Console.WriteLine("请输入第一个数"); double num1 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("请输入第二个数"); double num2 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("请输入运算符"); string oper = Console.ReadLine(); Operation jisuan = Factory.GetOpertation(oper, num1, num2);//调用静态函数的方法,返回值经过里氏转换, double res=0; //完成构造方法的初始化赋值 if (jisuan != null) { res = jisuan.Operate(); Console.WriteLine("{0}{1}{2}={3}", num1, oper, num2, res); } else { throw new Exception("输入异常"); } Console.ReadKey(); } }