Как мне реализовать композицию интерфейса? - PullRequest
0 голосов
/ 29 сентября 2011

У меня такая ситуация:

public interface IHasValue<T>
    {
        T Value { get; set; }
    }

public interface IClickable
    {
        void SubscribeOnClick(EventHandler click);
    }

public interface ILoginView : IView
    {
        IHasValue<string> Username { get; }
        IHasValue<string> Password { get; }
        IClickable Login { get; }
        IClickable Cancel { get; }
    }

public partial class LoginVIew : Form, ILoginView
    {
        public LoginVIew()
        {
            InitializeComponent();
        }

        #region ILoginView Members

        public IHasValue<string> Username
        {
            get { ?? }
        }

        public IHasValue<string> Password
        {
            get { ?? }
        }

        public IClickable Login
        {
            get { ?? }
        }

        public IClickable Cancel
        {
            get { ?? }
        }

        #endregion
    }

Как мне это реализовать? Понятия не имею.

1 Ответ

3 голосов
/ 29 сентября 2011

Ну, вам нужно реализовать IHasValue<T> и IClickable, чтобы иметь возможность создавать реализацию ILoginView (потому что вам нужно иметь возможность создавать экземпляры объекта, реализующего эти интерфейсы в ILoginViewчлены.

 public class StringValue : IHasValue<string>
 {
     public string Value { get; set; }
 }

 public interface LoginClickable : IClickable
 {
     public void SubscribeOnClick(EventHandler click)
     {
          // do something to login
     }
 } 

 public interface CancelClickable : IClickable
 {
     public void SubscribeOnClick(EventHandler click)
     {
          // do something to cancel
     }
 } 

...

    public IHasValue<string> Username
    {
        get { return new StringValue { Value = "Username" }; }
    }

    public IHasValue<string> Password
    {
         get { return new StringValue { Value = "Password" }; }
    }

    public IClickable Login
    {
        get { return new LoginClickable(); }
    }

    public IClickable Cancel
    {
        get { return new CancelClickable(); }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...