.net如何在没有构造函数的情况下创建非静态类?

时间:2013-08-10 05:43:15

标签: .net class constructor default-constructor

<。>在.net中存在类似于RegistryKey的类,例如:

RegistryKey RK=Registry.LocalMachine;

上面的类不是静态的(据我所知)但它没有构造函数,例如

RegistryKey RK=new RegistryKey();

无效(注册表项类没有定义构造函数)

我在网上搜索了但是我找不到任何信息

当我写下面的

class MyClass2
{
    protected MyClass2(int x)
    {
    }
}

我得到的MyClass2.MyClass2由于其保护级别而无法访问

我真正想知道的是除了使构造函数变为私有之外没有别的办法可以为RegisteryKey和MyClass2等类提供不同的消息吗?

2 个答案:

答案 0 :(得分:1)

RegistryKey有两个带参数的私有构造函数。可能错误消息是因为没有默认构造函数RegistryKey(),因为如果使用参数定义构造函数,则不会生成隐式无参数构造函数。作为私人,你看不到它们。

从技术上讲,甚至无法使用new构建抽象类。然后,您可以创建私有派生类(或内部派生类)。

答案 1 :(得分:1)

下面的类都不是静态的或抽象的,你仍然无法创建ClassA的实例,因为构造函数是Internal(在本例中)。 ClassB当然可以创建ClassA的实例,因为这两个类都是同一个程序集的一部分,并且可以将它返回给调用者。

public class ClassA 
{
   internal ClassA()
   {
       // Internal default constructor.
   }

   public void GetDateTime()
   {
       Console.WriteLine(DateTime.Now.ToString());
   }

}

public  class ClassB
{
    public ClassA GetClassA()
    {
        ClassA obj = new ClassA();
        return obj;
    }


}

可通过ClassB访问ClassA实例。

        ClassB objB = new ClassB();
        ClassA objA = objB.GetClassA();
        objA.GetDateTime();