C#中的接口运用的问题

来源:百度知道 编辑:UC知道 时间:2024/06/25 03:58:31
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace test1
{
public class Program
{
interface IDriveingLicence
{
void GetLicence();
}
class Teacher : IDriveingLicence
{
public void GetLicence()
{
Console.WriteLine("获得驾驶执照");
}
}
public class test
{
static void DriveCar(string name, object o)
{
IDriveingLicence dl = o as IDriveingLicence;
if (dl != null)
{
Console.WriteLine("汽车被开动了");
}
else
{
Console.WriteLine("没有驾驶执照");
}
}

1,object类型转换为IDriveingLicence 当然需要as 哦
这好比dl = (IDriveingLicence )o;
2,Teacher t = new Teacher();
DriveCar("老师",t);
这儿Teacher 类里并没有无参构造函数,只有一个GetLicence()方法。 所以实例化的时候当然不会调用该方法打印“获得驾驶执照”
3,你那个补充问题:
涉及as Class和(class)的区别
比如IDriveingLicence dl = o as IDriveingLicence
和IDriveingLicence dl = (IDriveingLicence)o
前者如果转换不成功,则dl=null,后者不成功则报错哦
如果你写成static void DriveCar(string name, IDriveingLicence o)
无所谓了,哪种都没问题

IDriveingLicence dl = o as IDriveingLicence;
因为你传入的参数是object类型的变量o,这里你需要将变量o转换成IDriveingLicence类型,这样接下来你就可以判断是否能进行成功转换,以便进行下一步处理。

只要变量o实现了IDriveingLicence接口就可以了。