0

在 .net 中存在像 RegistryKey 这样的非静态类,例如:

RegistryKey RK=Registry.LocalMachine;

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

RegistryKey RK=new RegistryKey();

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

我搜索了网络,但我找不到任何信息

当我写以下内容时

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

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

我真正想知道的是,除了将构造函数设为私有之外,是否没有其他方法可以为 RegisteryKey 和 MyClass2 之类的类提供不同的消息?

4

2 回答 2

1

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

从技术上讲,即使是抽象类也不能用new. 然后,您可以创建一个私有派生类(或内部派生类)。

于 2013-08-10T05:48:42.240 回答
1

下面的类都不是静态的或抽象的,您仍然不能创建 ClassA 的实例,因为构造函数是内部的(在这种情况下)。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;
    }


}

ClassA 实例可通过 ClassB 访问。

        ClassB objB = new ClassB();
        ClassA objA = objB.GetClassA();
        objA.GetDateTime();
于 2013-08-11T05:25:05.837 回答