通过接口调用方法,而不创建接口的新实例
本文关键字:接口 新实例 实例 创建 调用 方法 | 更新日期: 2023-09-27 17:59:15
我想做的其实很简单,但由于某种原因,我要么走错了路,要么只是错过了一些重要的专有技术,因为我无法在不创建类/接口的新实例的情况下通过接口调用方法。
无论哪种方式,我试图实现的是通过实现该方法的接口调用以下方法,而不必创建新实例。
public partial class MyClass : IMyInterface
{
public void MyMethod(object obj)
{
//Method code....
}
}
我的接口
public interface IMyInterface
{
void MyMethod(object obj);
}
我的解决方案有三个项目
- 数据
- 服务
- UI
Interface和MyClass.xaml.cs
在UI中,我正试图通过使用接口的现有实例从服务层中的类调用MyMethod()
方法。
我在代码的另一个部分做了这样的操作,但在这里不起作用,我不知道为什么
//Register interface
internal static IMyInterface mi;
//and call it like so
mi.MyMethod(Object);
我在谷歌上做了很多搜索,但每个人似乎都创建了一个新的实例,在我的情况下,这不是一个有效的选择。
我试图实现的是通过实现该方法的接口,而不必创建新的实例
实现方法-的接口是错误的假设。接口从未实现该方法。它只是说实现这个接口的人应该实现那个方法。
实现您的接口的类——在您的例子中是MyClass
。你需要创建一个实例。
internal IMyInterface mi = new MyClass();
mi.MyMethod(Object);
没有其他办法。
通过使用接口的现有实例。
因此,如果您已经创建了MyClass类的一个实例,那么您可以像这样为它实现Singleton。因此,您的单个实例将在任何地方都可用。
例如:
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);
您不能创建接口的实例。您可以通过对象实现的接口访问对象。例如,如果您有一个List<T>
,您可以通过IList<T>, ICollection<T>, IEnumerable<T>, IEnumerable, IList, ICollection, IReadOnlyList<T>,
IReadOnlyCollection<T>
访问它。
接口没有任何代码或任何实现。你定义了一个像IFruit
这样的接口,它有Color
和Taste
属性以及Eat
方法,但你没有在其中实现任何东西。当你说Red Apple
类正在实现IFruit
时,你就实现了该类中的属性和方法。
换句话说,您可以通过接口访问对象。接口后面必须有一个对象。
去死这个。
我将提供一种替代方法/路径,为接口的实现和执行提供不同的方法
.Net Fiddle(清除短URL时包含的内容)
设置
接口
public interface IMyInterface{
void MyMethod();
}
类别
public class MyClass : IMyInterface{
// Implicit Implementation
public void MyMethod(){
Console.WriteLine("* Entered the Implicit Interface Method");
(this as IMyInterface).MyMethod();
}
// Explicit Implementation
void IMyInterface.MyMethod(){
Console.WriteLine("--> Entered the Explicit Interface Method");
}
}
执行
using System;
public class Program
{
public static void Main()
{
var cl = new MyClass();
Console.WriteLine("Executing method off Object");
Console.WriteLine("--------------------------------");
cl.MyMethod();
Console.WriteLine("");
Console.WriteLine("");
Console.WriteLine("Executing method through Casting");
Console.WriteLine("--------------------------------");
(cl as IMyInterface).MyMethod();
}
}
结果
Executing method off Object
--------------------------------
* Entered the Implicit Interface Method
--> Entered the Explicit Interface Method
Executing method through Casting
--------------------------------
--> Entered the Explicit Interface Method