Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何实现这种继承_C#_Oop_Dependency Injection - Fatal编程技术网

C# 如何实现这种继承

C# 如何实现这种继承,c#,oop,dependency-injection,C#,Oop,Dependency Injection,假设我有如下定义: public interface ISerializable<TSource, TDest> { TDest Serialize(); TSource Deserialize(TDest dto); } 通过这种方式,我可以对最终用户隐藏setter,而在组装这些类时,我仍然可以不受限制地访问setter,因为我在内部使用的不是IA。我仍然不清楚什么让您感到困惑。如果类需要具有ISerialize方法的IA版本,请使用同时实现IA和ISerializea

假设我有如下定义:

public interface ISerializable<TSource, TDest>
{
  TDest Serialize();
  TSource Deserialize(TDest dto);
}

通过这种方式,我可以对最终用户隐藏setter,而在组装这些类时,我仍然可以不受限制地访问setter,因为我在内部使用的不是IA。

我仍然不清楚什么让您感到困惑。如果类需要具有ISerialize方法的IA版本,请使用同时实现IA和ISerializeable的iSerializeAware。这有用吗

public interface ISerializable<out T1, T2>
{
    T2 Serialize();
    T1 Deserialize(T2 dto);
}

public interface IA<out T1, T2>
{
    string Name { get; }
}

public interface IASerializeAware<out T1,T2> :  IA<T1, T2>, ISerializable<T1,T2>
{
}

public abstract class ASerializeAwareBase<T1, T2> : Serializable<T1,T2>, IASerializeAware<T1,T2>
{
    public string Name { get; set; }
}

public abstract class Serializable<T1, T2> : ISerializable<T1, T2>
{
    public T2 Serialize()
    {
        throw new NotImplementedException();
    }

    public T1 Deserialize(T2 dto)
    {
        throw new NotImplementedException();
    }
}

你能在类中实现你的接口吗?让我们将其称为基类,然后对要使用从基类继承的序列化的类调用其方法?@juanreyesv Hi,谢谢您的回答。我编辑了我的问题以作进一步解释。只需将界面更改为您需要的任何级别即可。您可以从多个接口继承。@DeveloperGuo抱歉,我不完全理解您的答案。通过多个接口,您的意思是类A派生自ISerializable和IA?如果您需要一个同时公开两个get的接口;设置一个是justget,每个都有一个接口。您的抽象类可以实现这两个功能。我可能在这里犯了一些错误。让我困惑的是,我认为iSerializeAware和Serializable都是从ISerializable派生出来的,那么在ASerializeAwareBase中,我必须同时实现iSerializeAware.Serialize/Deserialize和Serializable.Serialize/Deserialize。当两个接口具有相同签名的方法时,我们需要这样做。但事实证明我错了。我会试试看,看是否还有其他问题。谢谢
public abstract class Serializable<TSource, TDest> : ISerializable<TSource, TDest>
{
  TDest Serialize() {...}
  TSource Deserialize(TDest dto) {...}
}
public interface IA
{
  string Name { get; }
}
public class A : IA
{
  public string Name { get; set; }
}
public interface ISerializable<out T1, T2>
{
    T2 Serialize();
    T1 Deserialize(T2 dto);
}

public interface IA<out T1, T2>
{
    string Name { get; }
}

public interface IASerializeAware<out T1,T2> :  IA<T1, T2>, ISerializable<T1,T2>
{
}

public abstract class ASerializeAwareBase<T1, T2> : Serializable<T1,T2>, IASerializeAware<T1,T2>
{
    public string Name { get; set; }
}

public abstract class Serializable<T1, T2> : ISerializable<T1, T2>
{
    public T2 Serialize()
    {
        throw new NotImplementedException();
    }

    public T1 Deserialize(T2 dto)
    {
        throw new NotImplementedException();
    }
}