gpt4 book ai didi

c# - 清楚我的代码中的接口(interface)使用情况

转载 作者:太空宇宙 更新时间:2023-11-03 15:07:24 25 4
gpt4 key购买 nike

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

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();
}
}

最佳答案

如果您想将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 的 future 实现者的行为方式是您现在没有预料到的)。

关于c# - 清楚我的代码中的接口(interface)使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42724853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com