使用if Interfaces

时间:2015-11-24 10:22:29

标签: c# dependency-injection interface

我有我的C#app 2类对象:

public class Alpha
{
    public string IAmCalledAndy {get;set;}
    public int IAmAnExtraField {get;set;}
}

public class Beta
{
    public string IAmCalledJohn {get;set;}
}

我也有两种方法:

public string testMethod1(Alpha myAlphaInstance)
{
    StringBuilder sb = new StringBuilder();
    sb.Append(JsonConvert.SerializeObject(myAlphaInstance));
    return sb.ToString();
}

public string testMethod2(Beta myBetaInstance)
{
    StringBuilder sb = new StringBuilder();
    sb.Append(JsonConvert.SerializeObject(myBetaInstance));
    return sb.ToString();
}

我想(对于整理和重构只有1种方法的情况:

public string testMethodGEneric(iObjectType myObjectInstance)
{
    StringBuilder sb = new StringBuilder();
    sb.Append(JsonConvert.SerializeObject(myBetaInstance));
    return sb.ToString();
}

所以,我确实理解Alpha和Beta对象需要从一个名为iObjectType的接口继承而不是iObjectType中的内容?

例如,实际上Class Alpha将包含Customer字段,而Class Beta将包含Address字段。

我希望过多吗?可以做到这一点而不会让它变得过于复杂,我可能会坚持原来的两种方法吗?

2 个答案:

答案 0 :(得分:2)

你不需要任何其他东西,你有你的通用功能:

public string testMethodGEneric(object instance)
{
    StringBuilder sb = new StringBuilder();
    sb.Append(JsonConvert.SerializeObject(instance));
    return sb.ToString();
}

JsonConvert.SerializeObject已经接受了Object类型。

答案 1 :(得分:1)

您可以实现任意数量的接口,并且接口不必包含任何方法。没有指定任何功能的接口称为“标记接口”

System.Web中的

IRequiresSessionState就是一个很好的例子。此接口不公开任何方法,但如果使用Http Handler实现它,则会在ProcessRequest(HttpContext context)方法处理请求期间使用会话状态。 Asp.Net将只提供会话状态。

因此,只需要一个标记界面,比如IAppEntityBase,没有任何方法,并且在两个类中都有。