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();
}
}