2015-11-24 50 views
1

我目前正在尝试管理我的项目中使用的不同REST服务,我通过将一个静态类作为一个容器类来完成这项工作,后面跟着几个嵌套类,像这样:实例化静态类中的嵌套类

public static class HostName { 
    private const string HostAddress = "https://rest.connection.string/api" 
    public class CourseQueryInformation{ 
     public CourseQueryInformation(string par, string par2) 
     { 
      ... 
     } 
    } 

    public class PersonQueryInformation{ 
     public CourseQueryInformation(string par, string par2) 
     { 
      ... 
     } 
    } 
} 

现在我的主要问题是,为了实例化一个新的对象,我一定要做到以下几点:

var typeofobj = new HostName.CourseQueryInformation("par","parer"); 

这种感觉有点乱。

所以,我的主要问题是,有没有办法以更清洁的方式做到这一点?我真的想保持在一个容器内排序的类,但我不确定这是否是最好的方法。

+0

请发表维护的代码一些实际的代码,你发布的东西看起来像没有返回类型的方法,但你称它们为类,你可以添加缺少的位?一个类没有参数。另外,为什么不只是一个名称空间足够? –

+0

对不起,这个例子是错误的。编辑! – Coss

+3

为什么你滥用一个静态类作为“容器”,当这正是命名空间的用途? – CodeCaster

回答

2

使用继承和一个命名空间应该这样解释:inheritance and nameSpaces

它应该是这样的

namespace Hosting 
{ 
    class Host //could be abstract also 
    { 
     private string _hostAddress = "foo"; 
     get { return _hostAddress; } 


    } 

    public class CourseQueryInformation : Host 
    { 
     public CourseQueryInformation(string par, string par2) 
      { 
       ... 
      } 
    } 


    public class PersonQueryInformation : Host 
    { 
     public PersonQueryInformation(string par, string par2) 
     { 
      ... 
     } 
    } 

} 

如果您使用继承,你还可以添加所有的东西与你的子类常见的,然后得到尊重的OO范式,以继承和多态弹唱

0

如果提供的方法是扩展,您总是可以使用扩展方法。那些在静态类中完美工作。 只在上面的使用中添加命名空间,您将拥有对它们的访问权限。就像linq一样。

否则,你可以使用的别名类中使用using namespace

using HNCourseQueryInformation = HostName.CourseQueryInformation; 
1

我认为没有错与您所呼叫的方式。作为替代方案,你可以使用主机名内的工厂模式:

public static CourseQueryInformation CreateCourseQueryInformation(string par, string par2) 
{ 
    return new CourseQueryInformation (par, par2); 
} 

,并调用它像:

var typeofobj = HostName.GetCourseQueryInformation("par","parer"); 

,或者使用命名空间别名为Samyne suggessts:

using CourseQueryInformation = HostName.CourseQueryInformation; 
var typeofobj = new CourseQueryInformation("par","parer");