**1、绝对路径和相对路径
绝对路径:通过给定的这个路径直接能在我的电脑中找到这个文件。
相对路径:文件对于应用程序的路径。
结论:
我们在开发中应该去尽量的使用相对路径。
2、装箱、拆箱
装箱:就是将值类型转换为引用类型。
拆箱:将引用类型转换为值类型。
看两种类型是否发生了装箱或者拆箱,要看,这两种类型是否存在继承关系。
3、将创建文件流对象的过程写using当中,会自动的帮助我们释放所占用的资源。
4、实现多态的手段
1)、虚方法
步骤:
1、将父类的方法标记为虚方法,使用关键字 virtual,这个函数可以被子类重新写一个遍历。
**
using System;
namespace 多态
{
class Program
{
static void Main(string[] args)
{
//概念:让一个对象能够表现出多种的状态(类型)
//实现多态的3种手段:1、虚方法 2、抽象类 3、接口
//Person[] pers = new Person[6];
Chinese cn1 = new Chinese("韩梅梅");
Chinese cn2 = new Chinese("李雪");
Japanese j1 = new Japanese("树下君");
Japanese j2 = new Japanese("井边子");
Korea k1 = new Korea("金秀资");
Korea k2 = new Korea("金秀资");
American a1 = new American("科比");
American a2 = new American("奥尼尔");
Person[] pers = { cn1, cn2, j1, j2, k1, k2, a1, a2,new English("格林"),new English("玛利亚") };
for (int i = 0; i < pers.Length; i++)
{
/* if (pers[i] is Chinese)
{
((Chinese)pers[i]).Sayhello();
}
else if (pers[i] is Japanese)
{
((Japanese)pers[i]).SayHello();
}
else if (pers[i] is Korea)
{
((Korea)pers[i]).SayHello();
}
else
((American)pers[i]).SayHello();*/
pers[i].SayHello();
}
Console.ReadKey();
}
}
#region 虚方法
public class Person
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
public Person(string name)
{
this.Name = name;
}
public virtual void SayHello()
{
Console.WriteLine("我是人类");
}
}
public class Chinese:Person
{
public Chinese(string name)
:base(name)
{
}
public override void SayHello()
{
Console.WriteLine("我是中国人,我叫{0}", this.Name);
}
}
public class Japanese:Person
{
public Japanese(string name)
:base(name)
{ }
public override void SayHello()
{
Console.WriteLine("我是脚盆国人,我叫{0}", this.Name);
}
}
public class Korea:Person
{
public Korea(string name)
:base(name)
{
}
public override void SayHello()
{
Console.WriteLine("我是棒子之思密达,我叫{0}", this.Name);
}
}
public class American:Person
{
public American(string name)
:base(name)
{
}
public override void SayHello()
{
Console.WriteLine("我叫{0},我是米国人", this.Name);
}
}
#endregion
public class English:Person
{
public English(string name)
:base(name)
{ }
public override void SayHello()
{
Console.WriteLine("我是英国人");
}
}
}
2、抽象类
当父类中的方法不知道如何去实现的时候,可以考虑将父类写成抽象类,将方法写成抽象。
using System;
namespace 抽象类
{
class Program
{
static void Main(string[] args)
{
//狗狗会叫 猫咪也会叫
Animal a = new Dog();
a.Bark();
Console.ReadKey();
}
}
public abstract class Animal
{
public abstract void Bark();
}
public class Dog:Animal
{
public override void Bark()
{
Console.WriteLine("狗狗旺旺的叫");
}
}
public class Cat:Animal
{
public override void Bark()
{
Console.WriteLine("猫咪喵喵的叫");
}
}
}
using System;
namespace 抽象类
{
class Program
{
static void Main(string[] args)
{
//使用多态求矩形的面积和周长以及圆形的面积和周长
Shape shape = new Circle(5);//new Sqare(5,6)
double area = shape.GetArea();
double perimeter = shape.GetPerimeter();
Console.WriteLine("这个形状的面积是{0},周长是{1}",area,perimeter);
Console.ReadKey();
}
}
public abstract class Shape
{
public abstract double GetArea();
public abstract double GetPerimeter();
}
public class Circle:Shape
{
private double _r;
public double R
{
get { return _r; }
set { _r = value; }
}
public Circle(double r)
{
this.R = r;
}
public override double GetArea()
{
return Math.PI * this.R * this.R;
}
public override double GetPerimeter()
{
return 2 * Math.PI * this.R;
}
}
public class Square:Shape
{
private double _height;
public double Height
{
get { return _height; }
set { _height = value; }
}
private double _width;
public double Width
{
get { return _width; }
set { _width = value; }
}
public Square(double height,double width)
{
this.Height = height;
this.Width = width;
}
public override double GetArea()
{
return this.Height = this.Width;
}
public override double GetPerimeter()
{
return (this.Height + this.Width) * 2;
}
}
}
using System;
namespace 电脑_移动硬盘_U盘_MP3
{
class Program
{
static void Main(string[] args)
{
//用多态来实现 将移动硬盘或者U盘或者MP3插到电脑上进行读写数据
/*MobileDisk md = new MobileDisk();
UDisk u = new UDisk();
MP3 mp3 = new MP3();
Computer cpu = new Computer();
cpu.CpuRead(u);
cpu.CpuWrite(u);
Console.ReadKey();*/
MobileStorage ms = new MP3();
Computer cpu = new Computer();
cpu.CpuRead(ms);
cpu.CpuWrite(ms);
Console.ReadKey();
}
}
/// <summary>
/// 抽象的父类
/// </summary>
public abstract class MobileStorage
{
public abstract void Read();
public abstract void Write();
}
public class MobileDisk:MobileStorage
{
public override void Read()
{
Console.WriteLine("移动硬盘在读取数据");
}
public override void Write()
{
Console.WriteLine("移动硬盘在写入数据");
}
}
public class UDisk:MobileStorage
{
public override void Read()
{
Console.WriteLine("U盘在读取数据");
}
public override void Write()
{
Console.WriteLine("U盘在写入数据");
}
}
public class MP3:MobileStorage
{
public override void Read()
{
Console.WriteLine("MP3读取数据");
}
public override void Write()
{
Console.WriteLine("MP3写入数据");
}
public void PlayMusic()
{
Console.WriteLine("MP3自己可以播放音乐");
}
}
public class Computer
{
public void CpuRead(MobileStorage ms)
{
ms.Read();
}
public void CpuWrite(MobileStorage ms)
{
ms.Write();
}
}
}