在静态类中实例化嵌套类

时间:2015-11-24 13:12:39

标签: c# static nested

我目前正在尝试管理我在项目中使用的不同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");

这感觉有点乱。

所以,我的主要问题是,有没有办法以更清洁的方式做到这一点?我真的希望将类保存在容器中,但我不确定这是否是最好的方法。

3 个答案:

答案 0 :(得分: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范例,播放继承和多态

答案 1 :(得分:1)

我认为你打电话的方式没有错。作为替代方案,您可以在HostName中使用工厂模式:

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

并称之为:

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

或使用名称空间别名作为Samyne建议:

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

答案 2 :(得分:0)

如果提供的方法是扩展,则可以始终使用扩展方法。那些在静态类中完美地工作。 只在上面的使用中添加命名空间,您才能访问它们。就像linq一样。

否则,您可以在using namespace

中为该类使用别名
using HNCourseQueryInformation = HostName.CourseQueryInformation;