.net如何创建没有构造函数的非静态类?
在.net中,存在诸如RegistryKey之类的非静态类,例如:.net如何创建没有构造函数的非静态类?,.net,class,constructor,default-constructor,.net,Class,Constructor,Default Constructor,在.net中,存在诸如RegistryKey之类的非静态类,例如: RegistryKey RK=Registry.LocalMachine; 上面的类不是静态的(据我所知),但它没有构造函数 RegistryKey RK=new RegistryKey(); 无效(注册表项类未定义构造函数) 我在网上搜索了一下,但还是找不到任何信息 当我写下 class MyClass2 { protected MyClass2(int x) { } } 我得到MyClass2。
RegistryKey RK=Registry.LocalMachine;
上面的类不是静态的(据我所知),但它没有构造函数
RegistryKey RK=new RegistryKey();
无效(注册表项类未定义构造函数)
我在网上搜索了一下,但还是找不到任何信息
当我写下
class MyClass2
{
protected MyClass2(int x)
{
}
}
我得到MyClass2。MyClass2由于其保护级别而不可访问
我真正想知道的是,如果除了使构造函数私有化之外没有其他方法,那么像RegisteryKey和MyClass2这样的类怎么会有不同的消息呢?
RegistryKey
有两个带参数的私有构造函数。错误消息可能是因为没有默认构造函数RegistryKey()
,因为如果使用参数定义构造函数,则不会生成隐式无参数构造函数。作为他们的私人,你看不到他们
从技术上讲,即使是抽象类也不能用
new
构建。然后,您可以创建一个私有派生类(或内部派生类)。下面的类都不是静态的或抽象的,您仍然无法创建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;
}
}
可以通过ClassB访问ClassA实例
ClassB objB = new ClassB();
ClassA objA = objB.GetClassA();
objA.GetDateTime();
@ψεδή到底是什么?关于
Registry.LocalMachine
是如何实现的?@ψενΔή我会做得更好。。。我会教你怎么去钓鱼。当你有一个类似的问题时,你可以选择一个或多个类似的程序,然后查看.NET内部。在这种情况下,它非常简单:Registry.LocalMachine
是一个静态只读
字段,通过使用RegistryKey.GetBaseKey
进行初始化(一种RegistryKey
的内部静态
方法)它可以使用RegistryKey
的private
构造函数之一来创建RegistryKey
(它可以使用它,因为它在同一个类中)。@ψεΔήRegistry
和RegistryKey
在同一个程序集中(mscorlib
),因此注册表
可以使用注册表项
的内部
方法。