2015-11-24 52 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");