大家好!public interface IPerson
{
// 交作业
void HandInHomework(); // 输入银行卡密码
void InputBankPwd();
}
public class Me : IPerson
{
#region IPerson 成员 public void HandInHomework()
{
Console.WriteLine("I will hand on my homework in a moment");
}
public void InputBankPwd()
{
Console.WriteLine("My Bank pwd is : ******** ");
} #endregion
}public class Teacher
{
public void Method()
{
Me me = new Me();
me.InputBankPwd();
}
}
如上, 有一个接口IPerson, 定义2个方法, 然后定义一个类Me, 来实现他, 最后有个Teacher类.
我想用IPerson来规范Me, 但是2个方法都变成public了, Teacher可以叫我HandInHomework(), 可是他也可以叫我InputBankPwd()了, 这明显不合理吧? 请教大家, 应该怎么设计才对? 先谢谢!
{
// 交作业
void HandInHomework(); // 输入银行卡密码
void InputBankPwd();
}
public class Me : IPerson
{
#region IPerson 成员 public void HandInHomework()
{
Console.WriteLine("I will hand on my homework in a moment");
}
public void InputBankPwd()
{
Console.WriteLine("My Bank pwd is : ******** ");
} #endregion
}public class Teacher
{
public void Method()
{
Me me = new Me();
me.InputBankPwd();
}
}
如上, 有一个接口IPerson, 定义2个方法, 然后定义一个类Me, 来实现他, 最后有个Teacher类.
我想用IPerson来规范Me, 但是2个方法都变成public了, Teacher可以叫我HandInHomework(), 可是他也可以叫我InputBankPwd()了, 这明显不合理吧? 请教大家, 应该怎么设计才对? 先谢谢!
然后编写不同的类实现接口。调用时只调需要的类。
Me me = new Me()
这样虽然语法没错,但是从设计角度看是错误的, 因为违背了设计的初衷。
应该写为 IPerson person = new Me();
public interface IPerson
{
// 交作业
void HandInHomework(); // 输入银行卡密码
void InputBankPwd();
}按你的叙述,你这个接口本身定义的就有问题,
因为“交作业”这个动作都不是所有的Person都具有的动作,比如:教师;非学生都不具有交作业的动做,
“输入银行卡密码”这个动作可以在某些程度(范围)认为是都具有的动作;所以你的接口最好分解:public interface IStudent
{
// 交作业
void HandInHomework();
}
public interface IBankOperate
{
// 输入银行卡密码
void InputBankPwd();
}你的Me类可以实现这两个接口,但是在Teacher类中只能“看见”IStudent“这个接口,而不能“看见”IBankOperate这个接口,因为一但“看见”了这个接口,就可以控制你的银行卡,而做一个“非法”操作,所以你的Teacher类应该如下实现:public class Teacher
{
public void Method()
{
IStudent me = new Me();
me.HandInHomework();
}
}
这样就不会矛盾了吧?希望我没有曲解您的意思!
IPerson的InputBankPwd()规范了Person的动作而已, 但InputBankPwd应该是只能被自己调用, 而不应该被外界调用啊!
你的意思是InputBankPwd()不能在接口里规范了? 那应该在哪规范?
可以规范,但是不能在IStudent这个接口里规范,并且你的Teacher类也不能直接使用Me类的实例,而是使用IStudent这个接口;
如果这样的话,你不能用接口实现,看看接口的作用你就明白了,在这里可以设为私有方法,或组合一个实现了IBankOperate的类,这样就解决这个问题了;
{
#region IPerson 成员 public void HandInHomework()
{
Console.WriteLine("I will hand on my homework in a moment");
}
void IPerson.InputBankPwd()
{
Console.WriteLine("My Bank pwd is : ******** ");
} #endregion
}