没有实例的接口方法

本文关键字:接口 方法 实例 | 更新日期: 2023-09-27 17:58:53

所以这个标题听起来很奇怪,但我的疯狂背后有(至少我认为有)原因。我想从类中调用接口的方法,而不必创建该类的实例;与静态方法完全一样,但我想添加一些泛型。

interface ISaveMyself
{
    Stream Save( );
    // If I could force this to be static, it would fix my problem
    Object Load( MyClass instance );
}
class MyClass
{
    #region Implementing ISaveMyself
    public Stream Save( )
    {
        Stream stream;
        // Serialize "this" and write to stream
        return stream;
    }
    // Implements my interface by calling my static method below
    Object ISaveMyself.Load( Stream stream )
    {
        return MyClass.Load( stream );
    }
    #endregion Implementing ISaveMyself
    // Static method in the class because interfaces don't allow static
    public static Object Load( Stream )
    {
        Object currentClass = new MyClass( );
        // Deserialize the stream and load data into "currentClass"
        return currentClass;
    }
}

然后我会想做这样的事情,称之为:

Type myClassType = typeof( MyClass )
// This would never work, but is essentially what I want to accomplish
MyClass loadedClass = ( myClassType as ISaveMyself ).Load( stream );

我理解这个问题听起来有多愚蠢,而且在接口中不可能有静态方法。但为了科学和整个社会的熏陶,有更好的方法吗?感谢您的时间和任何建议。

没有实例的接口方法

为了科学和整个社会的启迪,有更好的方法吗?

是的关注点的分离表示您应该使用一个可以实例化的不同类来从流中加载其他类,而不是将同一个类用于多种目的。

interface ISaveObjects<T>
{
    Stream Save(T obj);
}
interface ILoadObjects<T>
{
    T Load(Stream stream);
}
public class MyClassStreamer : ISaveObjects<MyClass>, ILoadObjects<MyClass>
{
    public MyClass Load(Stream stream)
    {
        // Deserialize the stream and load data into new instance
    }
    public Stream Save(MyClass obj)
    {
        Stream stream;
        // Serialize "obj" and write to stream
        return stream;
    }
}

我认为实现这一点的唯一方法是继承基类而不是接口选项。类似于:

public class BaseClass
{
    public static BaseClass NewSelf()
    {
        return new BaseClass();
    }
}
public class TestClass : BaseClass
{
}

然后使用它:

TestClass newItem = (TestClass)BaseClass.NewSelf();
相关文章: