如何在类

时间:2017-03-07 14:25:18

标签: c# interface

我有两个继承自ICart接口的类

当我从这个类创建一个对象时,我只希望Guest类显示IsInfoExist属性。我该怎么办?

ICart cart = new Guest();
bool c = cart.IsInfoExist //it's ok

ICart cart = new Member();
cart.IsInfoExist not ok. 

实际上我不希望永远不会出现在intellinsense上但是界面强迫我显示成员IsInfoExist属性

class Guest:ICart
{
    public bool IsInfoExist
    {
        get { return Session["guest_info"] != null; }
    }

   public void GetCart()
   {

   }
}

class Member:ICart
{
    //Hide this on intellinsense always!
    public bool IsInfoExist
    {
        get { return false; }
    }


   public void GetCart()
   {

   }
}

public interface ICart
{
   void GetCart();
   bool IsInfoExist { get; }
}

4 个答案:

答案 0 :(得分:3)

如果IsInfoExists只能在Guest类中,请将其从界面中删除,并保留在Guest类中。 实现接口的类必须实现其中的所有方法,但是它可以具有不属于该接口并且特定于该类的其他方法。是否必须在IsInfoExists类中实现Member只是为了在之后隐藏它。所以,它会是这样的:

public interface ICart
{
     void GetCart();
}    

class Guest:ICart
{
    public bool IsInfoExist
    {
        get { return Session["guest_info"] != null; }
    }

    public void GetCart()
   {
   }
}

class Member:ICart
{ 
    public void GetCart()
    {
    }
}

修改

这种方法的问题似乎是你总是使用ICart类型的变量,这样你就无法访问该方法。但是你可以,你只需要将它转换为正确的类型,如下所示:

ICart cart = new Guest();
ICart cart2 = new Member();

if (cart is Guest)
{
   bool info=((Guest)cart).IsInfoExist;
}

if (cart is Member)
{
   bool info=((Member)cart).IsInfoExist; //this won't compile as IsInfoExist is not in the Member class
}

答案 1 :(得分:2)

通过明确实现属性:

bool ICart.IsInfoExist
{
    get { return Session["guest_info"] != null; }
}

如果你有MemberGuest个实例,除非你明确地将其转换为IsInfoExist,否则它不会有ICart

Member myMember = new Member();
bool test = myMember.IsInfoExist; // won't compile.
bool test1 = ((ICart) myMember).IsInfoExist; // will compile.

答案 2 :(得分:1)

使用两个接口来完成此任务。例如,例如ICartICartInfo。在这种情况下,你有一个明确的分离,它会使你的代码更清晰,更好阅读。

答案 3 :(得分:0)

我猜没有办法。 最近的解决方案是

 [Obsolete("Only Guest Member", true)]
        public bool IsInfoExist
        {
            get { return false; }
        }

我要用这个。谢谢