我有一个IUser
接口,用于实现void GetTasks()
和string GetRole()
然后我创建了一个类。
public class EmployeeRole : IUser
{
public void GetTasks()
{
//Get task
}
public string GetRole()
{
return "Employee";
}
public void EmployeeSpecificTask()
{
Console.Write("This is an employee's specific task.");
}
}
创建类和接口后我计划在我的Profile.cs
类上注入该类。这是代码:
`public class Profile
{
private readonly IUser _user;
public Profile(IUser user)
{
this._user = user;
}
public void DisplayTask()
{
_user.GetTasks();
}
public string MyRole()
{
return _user.GetRole();
}
//The error goes here
public void MySpecificTask()
{
_user.EmployeeSpecificTask();
}
public void Greetings()
{
Console.WriteLine("Hello! Welcome to profile.");
}
}
注射测试程序
Profile profile = new Profile(new EmployeeRole());
我的问题是,在调用EmployeeSpecificTask()
时我收到错误的原因是什么?
我的EmployeeRole类上有EmployeeSpecificTask()
。
答案 0 :(得分:1)
如果IUser界面如下:
public interface IUser
{
void GetTasks();
void GetRole();
}
然后,只有IUser对象的消费类才能访问该接口上的方法或属性。 如果要传递包含EmployeeSpecificTask()方法的接口类型,则需要定义另一个接口,如下所示:
public interface INewInterface : IUser
{
void EmployeeSpecificTask();
}
这将IUser接口与新接口相结合,使消费类可以访问IUser方法和您想要访问的新方法。 然后应该修改您的Profile构造函数以取代新的接口类型。
public class Profile
{
private readonly INewInterface _user;
public Profile(INewInterface user)
{
this._user = user;
}
public void DisplayTask()
{
_user.GetTasks();
}
public string MyRole()
{
return _user.GetRole();
}
public void MySpecificTask()
{
_user.EmployeeSpecificTask();
}
public void Greetings()
{
Console.WriteLine("Hello! Welcome to profile.");
}
}