大家好!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()了, 这明显不合理吧? 请教大家, 应该怎么设计才对?  先谢谢!

解决方案 »

  1.   

    两个不相干的业务应该分别设计到不同的接口中去。
    然后编写不同的类实现接口。调用时只调需要的类。
    Me me = new Me()
    这样虽然语法没错,但是从设计角度看是错误的, 因为违背了设计的初衷。
    应该写为 IPerson person = new Me();
      

  2.   

    HandInHomework 和 InputBankPwd 放到不同的接口中
      

  3.   

    不同的操作放在不同的接口中,这个我能理解。但我主要的问题是:如果用接口来规范类,那么所有的方法都是public,但是InputBankPwd()我想用接口来规范,又不想被别人调用(写成private),应该怎么写?
      

  4.   


    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();
        }  
    }
    这样就不会矛盾了吧?希望我没有曲解您的意思!
      

  5.   

    不矛盾吧? IPerson的InputBankPwd()规范了Person的动作而已, 但InputBankPwd应该是只能被自己调用, 而不应该被外界调用啊!
      

  6.   

    我知道我的接口设计有问题, 但这里只是举个例子, 请大家把重点放在:
    IPerson的InputBankPwd()规范了Person的动作而已, 但InputBankPwd应该是只能被自己调用, 而不应该被外界调用啊!
      

  7.   

    如果设置成私有的 me.InputBankPwd();就不能被调用 一个不能调用的方法你放到接口里面干啥?
      

  8.   


    你的意思是InputBankPwd()不能在接口里规范了? 那应该在哪规范?
      

  9.   


    可以规范,但是不能在IStudent这个接口里规范,并且你的Teacher类也不能直接使用Me类的实例,而是使用IStudent这个接口;
      

  10.   


    如果这样的话,你不能用接口实现,看看接口的作用你就明白了,在这里可以设为私有方法,或组合一个实现了IBankOperate的类,这样就解决这个问题了;
      

  11.   

    你既然写了teacher类,自己在写一个方法实现IPerson就OK了
      

  12.   

    那就用显式接口实现吧,但就如楼上所说的,你这个设计明显是不合理的        public class Me : IPerson
            {
                #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
            }
      

  13.   

    http://topic.csdn.net/u/20091208/20/3e9343df-1694-4f7a-ab14-55e7c76f796d.html?seed=1855228275&r=61897217#r_61897217请各位也帮忙看看这问题好吗?