0

.net には、たとえば静的ではない RegistryKey のようなクラスが存在します。

RegistryKey RK=Registry.LocalMachine;

上記のクラスは(私が理解している限り)静的ではありませんが、たとえばコンストラクターはありません

RegistryKey RK=new RegistryKey();

無効です (レジストリ キー クラスにコンストラクタが定義されていません)

Webを検索しましたが、情報が見つかりませんでした

次のように書くと

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

MyClass2.MyClass2 is inaccessible due to it's protection level

私が本当に知りたいのは、コンストラクターを非公開にする以外に方法がない場合、どうすれば RegisteryKey や MyClass2 などのクラスに対して異なるメッセージが存在するのでしょうか?

4

2 に答える 2

1

RegistryKeyパラメーターを持つ 2 つのプライベート コンストラクターがあります。おそらくエラー メッセージは、既定のコンストラク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 に答える