2015-06-24 4 views
0

То, что я пытаюсь сделать, на самом деле очень просто, но по какой-то причине я либо ошибаюсь, либо просто теряю некоторые важные знания, потому что я просто не могу понять, как вызвать метод через интерфейс, не создавая новый экземпляр класса/интерфейса.Вызов метода через интерфейс без создания нового экземпляра интерфейса

В любом случае я пытаюсь вызвать следующий метод через интерфейс, реализующий этот метод, без необходимости создания нового экземпляра.

public partial class MyClass : IMyInterface 
{ 
    public void MyMethod(object obj) 
    { 
     //Method code.... 
    } 
} 

мой интерфейс

public interface IMyInterface 
{ 
    void MyMethod(object obj); 
} 

Мое решение имеет три проекта

  • данных
  • служба
  • UI

Интерфейс и MyClass.xaml.cs находятся в пользовательском интерфейсе, и я пытаюсь вызвать метод MyMethod() из класса на моем уровне сервиса, используя существующий экземпляр интерфейса.

Я сделал это, как это из другого раздела в коде, который не работает здесь, я понятия не имею, почему

//Register interface 
internal static IMyInterface mi; 
//and call it like so 
mi.MyMethod(Object); 

Я сделал много Google поисков, но все, кажется, чтобы создать новый экземпляр который в моем случае не является допустимым вариантом.

ответ

1

с помощью существующего экземпляра интерфейса.

Итак, если вы создали один экземпляр класса MyClass, вы могли бы реализовать Singleton для него like this. Таким образом, ваш единственный экземпляр будет доступен везде.

Например:

public partial class MyClass : IMyInterface 
{ 
    private static IMyInterface _instance; 

    public static IMyInterface Instance 
    { 
     get 
     { 
      if (_instance == null) _instance = new MyClass(); 
      return _instance; 
     } 
    } 
    public void MyMethod(object obj) 
    { 
     //Method code.... 
    } 
} 

И

//Register interface 
internal static IMyInterface mi = MyClass.Instance; 
//and call it like so 
mi.MyMethod(Object); 
1

Вы не можете создать экземпляр интерфейса. Вы можете получить доступ к объекту через интерфейсы, которые он реализует. Например, если у вас есть List<T>, вы можете получить к нему доступ через IList<T>, ICollection<T>, IEnumerable<T>, IEnumerable, IList, ICollection, IReadOnlyList<T>, IReadOnlyCollection<T>.

Интерфейсы не имеют кодекса или реализации. Вы определяете интерфейс, такой как IFruit, который имеет Color и Taste и Eat, но вы ничего не реализуете в нем. Когда вы говорите, что класс Red Apple реализует IFruit, тогда вы реализуете свойства и методы в этом классе.

В другом слове вы можете получить доступ к объектам через интерфейсы. У вас должен быть объект за интерфейсом.

3

, что я пытаюсь добиться, чтобы вызвать следующий метод через интерфейс, который реализует метод, без необходимости создавать новый экземпляру

интерфейс, который реализует метод - неверное предположение. Интерфейс никогда не реализует метод. Он просто говорит, что тот, кто реализует этот интерфейс, должен реализовать этот метод.

Класс, который реализует ваш интерфейс - в вашем случае MyClass. Вам нужно создать экземпляр.

internal IMyInterface mi = new MyClass(); 
mi.MyMethod(Object); 

Нет другого выхода.

Смежные вопросы