清楚我的代码中的界面使用情况

时间:2017-03-10 17:57:34

标签: c#

我使用了一个接口为类IDName提供了2个值,即EmployeeStudent。此后我使用了类型接口的功能来选择这两个类中的哪一个'应该选择对象,然后在Main()中提供值。现在重点是,我想在Employee类的函数中使用这些值。但不知怎的,我没有得到,如何访问此功能,因为对象类型接口将不允许我访问该对象&如果我创建一个新对象,我提供的值就不再存在了。那么正确的做法是什么呢? Plz帮忙!

interface IData
{
    int ID { get; set; }
    string Name { get; set; }
}

class Employee : IData
{
    public int ID { get; set; }
    public string Name { get; set; }
    public void getDetails()
    {
        Console.WriteLine("Emp"+ID);
    }
}

class Student : IData
{
    public int ID { get; set; }
    public string Name { get; set; }
}

class Choice
{
    public IData Fetch(bool Flag)
    {
        if (Flag == true)
        {
            Employee em = new Employee();
            return em;
        }
        else
        {
            Student st = new Student();
            return st;
        }
    }
}

class Program
{

    static void Main(string[] args)
    {
        Choice ch=new Choice();
        IData idata = ch.Fetch(true);
        Console.WriteLine("Enter ID and Name:");
        idata.ID = int.Parse(Console.ReadLine());
        idata.Name = Console.ReadLine();

        //Console.WriteLine("Id={0} & Name={1}", idata.ID, idata.Name);
        Console.WriteLine(idata.GetType());
        Console.ReadLine();
    }
}

1 个答案:

答案 0 :(得分:0)

如果要将IData对象用作Employee对象,则必须进行转换。当然,您应该检查以确保该演员表有意义。

使用您的示例程序,您可以执行以下操作:

static void Main(string[] args)
{
    Choice ch=new Choice();
    IData idata = ch.Fetch(true);
    Console.WriteLine("Enter ID and Name:");
    idata.ID = int.Parse(Console.ReadLine());
    idata.Name = Console.ReadLine();

    var employee = idata as Employee;
    if (employee != null)
    {
        employee.getDetails();
    }
    //Console.WriteLine("Id={0} & Name={1}", idata.ID, idata.Name);
    Console.WriteLine(idata.GetType());
    Console.ReadLine();
}

在这里使用as运算符并测试null将检查您的对象是否实际上是Employee并将其强制转换为该对象。您可以进行直接转换(例如((Employee)idata).getDetails(),但如果转换失败则会冒着抛出异常的风险(并且由于您犯了错误或因IData的未来实施者表现不佳而失败你现在没有预料到的方式。)