我使用了一个接口为类ID
和Name
提供了2个值,即Employee
和Student
。此后我使用了类型接口的功能来选择这两个类中的哪一个'应该选择对象,然后在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();
}
}
答案 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
的未来实施者表现不佳而失败你现在没有预料到的方式。)