//接口
interface IAction
{
void Move();
}
//类
class Anmial : IAction
{
//实现接口成员
public void Move()
{
Console.WriteLine("Go! Go! Go!");
}
}
//调用
class Program
{
static void Main(string[] args)
{
IAction action = new Anmial();
action.Move();
Console.ReadKey();
}
}这边Anmial类的Move方法是孤立的,和其他成员没有关系,如果Anmial类还有一个Name属性,Move方法如下:
public void Move()
{
Console.WriteLine(Name + ",Go! Go! Go!");
}现在的问题是,Name不是IAction的成员,我们不能使用多态性对它进行赋值,那怎么给这个Name赋值呢?看下边方法:
//接口
interface IAction
{
void Move();
}
//类
class Anmial : IAction
{
private string _name;
/// <summary>
/// 名字
/// </summary>
public string Name
{
set { _name = value; }
get { return _name; }
}
//实现接口成员
public void Move()
{
Console.WriteLine(Name + ",Go! Go! Go!");
}
}
//调用
class Program
{
static void Main(string[] args)
{
Anmial anmial = new Anmial();
anmial.Name = "Jack";
IAction action = anmial;
action.Move();
Console.ReadKey();
}
}这样接口多态性优势根本就无法显示出来了,解决方法是必须给Anmial添加一个非默认构造函数,在构造函数中必须可以给Name赋值!代码改后如下:
//接口
interface IAction
{
void Move();
}
//类
class Anmial : IAction
{
private string _name;
/// <summary>
/// 名字
/// </summary>
public string Name
{
set { _name = value; }
get { return _name; }
}
//构造函数(必须)
public Anmial(string name)
{
Name = name;
}
//实现接口成员
public void Move()
{
Console.WriteLine(Name + ",Go! Go! Go!");
}
}
//调用
class Program
{
static void Main(string[] args)
{
IAction action = new Anmial("Jack");
action.Move();
Console.ReadKey();
}
}
评论(0)
暂无评论。