タグ付けされた質問 「static-keyword」

10
C#で「静的」を使用しないでください
コードレビューのために、他のアーキテクトに書いた申請書を提出しました。そのうちの1人はすぐに返事を書き、「「静的」を使用しないでください。静的クラスと静的メソッドを使用して自動テストを作成することはできません。「静的」は避ける必要があります。」 チェックして、クラスの1/4が完全に「静的」とマークされています。クラスはコード全体で使用される単一のグローバルクラスであるため、クラスのインスタンスを作成しない場合は静的を使用します。 彼は、静的コードでは使用できないモック、IOC / DIテクニックを含むものについて言及し続けました。彼は、サードパーティのライブラリがテスト不能であるために静的である場合、それは残念だと言います。 この他の建築家は正しいですか? 更新:ここに例があります: APIManager-このクラスは、次に許可される時間とともに呼び出しているサードパーティAPIの辞書を保持します。多くのサードパーティが利用規約で持っているAPIの使用制限を強制します。Thread.Sleep(APIManager.GetWait( "ProviderXYZ"))を呼び出して、サードパーティサービスを呼び出す場所で使用します。電話をかける前に。ここにあるものはすべてスレッドセーフであり、C#のTPLでうまく機能します。

4
クラスを「静的」にする理由と時期 クラスの「静的」キーワードの目的は何ですか?
static多くの言語のメンバーのキーワードは、そのメンバーにアクセスできるようにするためにそのクラスのインスタンスを作成しないことを意味します。ただし、クラス全体を作成する理由はありませんstatic。なぜ、私はクラスを作る必要があるときstatic? クラスを作るとどんなメリットがありstaticますか?つまり、静的クラスを宣言した後も、インスタンス化せずにアクセスしたいすべてのメンバーを静的として宣言する必要があります。 これは、たとえば、Math開発者のコ​​ーディング方法に影響を与えることなく、クラスを(静的ではなく)通常と宣言できることを意味します。言い換えれば、クラスを静的または通常にすることは、開発者にとっては透過的です。

4
静的クラスよりも非静的内部クラスを好むのはなぜですか?
この質問は、Javaでネストされたクラスを静的なネストされたクラスにするか、内部のネストされたクラスにするかです。私はこことStack Overflowを検索しましたが、この決定の設計への影響に関する質問は本当に見つかりませんでした。 私が見つけた質問は、静的なクラスと内部のネストされたクラスの違いについて尋ねていることです。ただし、Javaで静的にネストされたクラスを使用する説得力のある理由はまだ見つかりませんでした。匿名クラスを除き、この質問では考慮していません。 静的なネストされたクラスを使用した場合の影響についての私の理解は次のとおりです。 結合の減少:クラスは外部クラスの属性に直接アクセスできないため、一般的に結合が減少します。一般に、結合が少ないということは、コードの品質の向上、テストの容易化、リファクタリングなどを意味します。 シングルClass:クラスローダーは毎回新しいクラスを処理する必要はなく、外側のクラスのオブジェクトを作成します。同じクラスの新しいオブジェクトを何度も取得するだけです。 内部クラスの場合、一般に、人々は外部クラスの属性へのアクセスをプロと考えることがわかります。この直接アクセスは高いカップリングを意味し、ネストされたクラスを別のトップレベルクラスに抽出したい場合は、本質的に向きを変えた後にのみ行うことができるため、デザインの観点からこの点で異なるようにお願いします静的なネストされたクラスに入れます。 したがって、私の質問はこれに帰着します:非静的内部クラスに利用可能な属性アクセスが高い結合につながり、したがってコード品質が低下すると仮定するのは間違っていますか、これから(非匿名)ネストされたクラスが一般的に静的ですか? または言い換えると:ネストされた内部クラスを好む理由は納得できますか?

6
静的キーワードを理解する
Java、Javascript、およびPHPを使用した開発の経験があります。 Microsoft Visual C#2010 Step by Stepを読んでいますが、C#言語を紹介する上で非常に良い本だと感じています。 静的キーワードの理解に問題があるようです。クラスが静的に宣言されている場合、これまで私が理解していたことから、すべてのメソッドと変数は静的でなければなりません。メインメソッドは常に静的メソッドであるため、メインメソッドが存在するクラスでは、すべての変数とメソッドは、メインメソッドで呼び出す必要がある場合、静的と宣言されます。また、別のクラスから静的メソッドを呼び出すために、クラス名を使用できるオブジェクトを作成する必要がないことに気付きました。 しかし、静的キーワードの実際の目的は何ですか?静的変数とメソッドはいつ宣言する必要がありますか?

1
PHPに静的プロパティをオーバーロードする機能がないのはなぜですか?
イントロ PHPでは、クラスでマジックメソッドを宣言することにより、メソッド呼び出しとプロパティアクセスをオーバーロードできます。これにより、次のようなコードが有効になります。 class Foo { public function __get($name) { return 42; } } $foo = new Foo; echo $foo->missingProperty; // prints "42" インスタンスのプロパティとメソッドのオーバーロードとは別に、PHP 5.3.0以降でstaticは、マジックメソッドをオーバーライドすることでメソッド呼び出しをオーバーロードすることもできます__callStatic。 何かが足りない 利用可能な機能から目立って欠けているのは、静的プロパティをオーバーロードする機能です。たとえば: echo Foo::$missingProperty; // fatal error: access to undeclared static property この制限は明確に文書化されています。 プロパティのオーバーロードは、オブジェクトコンテキストでのみ機能します。これらのマジックメソッドは、静的コンテキストではトリガーされません。したがって、これらのメソッドは宣言しないでくださいstatic。PHP 5.3.0以降、マジックオーバーロードメソッドの1つが宣言されている場合、警告が発行されstaticます。 しかし、なぜ? 私の質問は: この機能が現在サポートされていないという技術的な理由はありますか?それとも、(震え)政治的な理由ですか? 過去にこの機能を追加する試みが中止されたことはありますか? 最も重要なことは、質問は「ユーザーランドPHPで動的な静的プロパティをどのように設定できますか?」ではありません。とはいえ__callStatic、共有したいことに基づいて特にかわいい実装を知っている場合は、ぜひ共有してください。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.