12

しばらく前に、HttpContext オブジェクトのインスタンス化について質問しました。知らなかったことを学んだ今、私​​を混乱させているのは、HttpContext ctx = new HttpContext(); と言えないことです。オブジェクトにはコンストラクターがないためです。

しかし、すべてのクラスにコンストラクターが必要なのではないでしょうか? C# では、指定しない場合、コンパイラは自動的に既定の cstr を提供します。

また、文字列 (例: "Hello There!") があり、Convert.ToBoolean("Hello") または任意の文字列を指定した場合、これはどのように機能しますか? 舞台裏で何が起こっているのですか?この場合、CLR Via C# のような本が便利だと思います。

私は何が欠けていますか?

4

9 に答える 9

24

コンストラクターは、プライベートまたは保護することができます。
また、クラスに public コンストラクターがある場合でも、抽象クラスのインスタンスを作成することはできません。

于 2008-10-28T13:31:35.023 に答える
7

HttpContext には 2 つのオーバーロードを持つパブリック コンストラクターがありますが、既定 (パラメーターなし) ではありません。

例として、HttpContext インスタンスを開始して HttpContext.Current に割り当てるには、SimpleWorkerRequest インスタンスを渡す必要があります。

//Initialize this stuff with some crap
string appVirtualDir = "/"; 
string appPhysicalDir = @"C:\Documents and Settings\"; 
string page = @"localhost"; 
string query = string.Empty; 
TextWriter output = null;    
//Create a SimpleWorkerRequest object passing down the crap
SimpleWorkerRequest workerRequest = new SimpleWorkerRequest(appVirtualDir, appPhysicalDir, page, query, output);
//Create your fake HttpContext instance 
HttpContext.Current = new HttpContext(workerRequest);

詳細については、このリンクを参照してください。

とにかく、一部のクラスにはパブリック コンストラクターがありません。たとえば、シングルトンクラスを考えてみてください。コンストラクターはプライベートです (静的な getInstance メソッドを呼び出して、現在のインスタンスを取得するか、null の場合は作成できます)。

乾杯

于 2008-10-28T13:59:39.303 に答える
3

たとえば、シングルトンにはコンストラクターがないか、少なくともパブリックコンストラクターがありません。したがって、クラスがシングルトンの場合、書く代わりに

MyClass c = new MyClass();

代わりに書くでしょう

MyClass c = MyClass.getInstance();
于 2008-10-28T13:33:25.877 に答える
3

そこに3つの質問があります...

HttpContext ; 実際には 2 つの public コンストラクターがありますが、実際にはそれらを使用することは想定されていません。より一般的に言えば、次のようなデフォルト以外のコンストラクタを使用できますMyType foo = new MyType("abc");

不足しているコンストラクター すでに十分にカバーされていますが、いいえ: abstract/は最も単純ですが、パブリックコンストラクターstaticを持つ必要もありません。

ToBoolean 舞台裏で、これは と道徳的に同等のことを行います。これはbool.Parse("Hello")、既知の文字列、特に "True" と "False" をチェックするだけです (OrdinalIgnoreCase を使用し、null/trimming/etc を処理します)。

于 2008-10-28T14:07:11.470 に答える
1

シングルトンデザインパターンを見てください。

于 2008-10-28T13:49:57.247 に答える
1

HttpContext コンストラクターは非公開としてマークされていると思います。つまり、自分でインスタンス化することはできません。.net フレームワークは、バックグラウンドで作成します...

于 2008-10-28T13:32:17.033 に答える
1

一言で言えば、静的です。

そうしないと、クラスが内部または非公開でインスタンス化される可能性があります (ファクトリーまたはシングルトン)

サインルトン:

Class A{
public static readonly A Instance = new A();

private A()
{
}

}
于 2008-10-28T13:32:56.923 に答える
0

コンストラクターをプライベートにすると、クラスをextarnalyにインスタンス化することはできません。しかし、クラス内ではそれは可能です。したがって、クラスのインスタンスを返す静的メソッドを提供できます。シングルトンパターンはこれに基づいています。

于 2008-10-28T13:33:17.763 に答える
-1

コンパイラは、クラスに引数付きのコンストラクターが含まれるまで、クラスの既定のコンストラクターを作成しません。HttpContext クラスには、引数を持つ 2 つのコンストラクターがあります。そのため、HttpContext obj = new HttpContext() を実行するとエラーが表示されます。

public class Sample
{
    int x;
    public Sample (int x)
    {
        x = 2;
    }
}
public class Program
    {
        static void Main(string[] args)
        {
            Sample s = new Sample();//error is shown
        }
    }

上記の Sample クラスのコンストラクターを削除すると、コンパイラーがデフォルトのコンストラクター (引数なしのコンストラクター) を作成するため、エラーは発生しません。

于 2017-08-02T14:40:42.917 に答える