タグ付けされた質問 「c#」

C#は、Microsoftが.NETプラットフォームと並行して作成した、マルチパラダイムで管理されたガベージコレクションのオブジェクト指向プログラミング言語です。

22
なぜVBはそんなに人気があるのですか?[閉まっている]
私にとって、Visual Basicは不器用で、見苦しく、エラーが発生しやすく、読みにくいようです。他の人にその理由を説明 させます。VB.netは明らかに言語の機能面で大きな進歩を遂げてきましたが、なぜC#を介してVBでコーディングすることを選択するのか理解できません。 ただし、「MSショップ」の商用Webアプリの大部分はVBで構築されているようです(と思われます)。私はこれについて訂正することができますが、VBはそれが値するよりも人気があるようです。 誰でもこれらの質問のいずれか(またはすべて)に答えることができますか? VBで何か不足していますか?学ぶのは簡単ですか、それともC#より「友好的」ですか?知らない機能はありますか? VB / VB.netが今日特にWebプロジェクトで頻繁に使用されるのはなぜですか?

2
ビジネスロジックが変更されたときに失敗した場合、単体テストは脆弱と見なされますか?
以下のコードをご覧ください。女性の性別を持つ人がoffer1に適格であるかどうかをテストします。 [Fact] public void ReturnsFalseWhenGivenAPersonWithAGenderOfFemale() { var personId = Guid.NewGuid(); var gender = "F"; var person = new Person(personId, gender); var id = Guid.NewGuid(); var offer1 = new Offer1(id,"Offer1"); Assert.False(offer1.IsEligible(person)); } この単体テストは成功します。ただし、今後「Offer1」が女性に提供されると、失敗します。 言うことは受け入れられますか?オファー1を取り巻くビジネスロジックが変更された場合、ユニットテストは変更されなければなりません。データベースによっては、ビジネスロジックが次のように変更される場合があります(一部のオファーでは)。 update Offers set Gender='M' where offer=1; そして、このようなドメインモデルの場合には: if (Gender=Gender.Male) { //do something } また、背後のドメインロジックが定期的に変更を提供する場合と、そうでない場合もあることに注意してください。

2
純粋な抽象クラスとインターフェースの実装
これはC ++標準では必須ではありませんが、たとえばGCCが純粋な抽象クラスを含む親クラスを実装する方法は、問題のクラスのすべてのインスタンス化にその抽象クラスのvテーブルへのポインタを含めることです。 当然、これは、このクラスのすべてのインスタンスのサイズを、それが持つすべての親クラスのポインターによって膨張させます。 しかし、多くのC#クラスと構造体には、基本的に純粋な抽象クラスである多くの親インターフェイスがあることに気付きました。sayのすべてのインスタンスがDecimal、さまざまなインターフェースすべてへの6つのポインターで肥大化していた場合、私は驚くでしょう。 それで、C#がインターフェースを異なる方法で実行する場合、少なくとも典型的な実装では、どのようにインターフェースを実行しますか(標準自体はそのような実装を定義しないかもしれません)。また、純粋な仮想親をクラスに追加するときに、C ++の実装にオブジェクトサイズの膨張を回避する方法がありますか?

5
例外をキャッチ/スローすると、純粋なメソッドが不純になりますか?
次のコード例は、私の質問の背景を示しています。 Roomクラスはデリゲートで初期化されます。Roomクラスの最初の実装では、例外をスローするデリゲートに対するガードはありません。このような例外は、デリゲートが評価されるNorthプロパティにバブルアップします(注:Main()メソッドは、クライアントコードでRoomインスタンスがどのように使用されるかを示します)。 public sealed class Room { private readonly Func<Room> north; public Room(Func<Room> north) { this.north = north; } public Room North { get { return this.north(); } } public static void Main(string[] args) { Func<Room> evilDelegate = () => { throw new Exception(); }; var kitchen = new Room(north: …

3
ロック文の中にどれくらいの作業を配置する必要がありますか?
私は、サードパーティソリューションからデータを受信し、データベースに保存し、別のサードパーティソリューションで使用するためにデータを調整するソフトウェアの更新プログラムの作成に取り組んでいるジュニア開発者です。当社のソフトウェアはWindowsサービスとして実行されます。 以前のバージョンのコードを見ると、次のように表示されます。 static Object _workerLocker = new object(); static int _runningWorkers = 0; int MaxSimultaneousThreads = 5; foreach(int SomeObject in ListOfObjects) { lock (_workerLocker) { while (_runningWorkers >= MaxSimultaneousThreads) { Monitor.Wait(_workerLocker); } } // check to see if the service has been stopped. If yes, then exit if (this.IsRunning() == …
27 c#  .net  concurrency  locks 

5
不変オブジェクトのインターフェイスを宣言しないでください
不変オブジェクトのインターフェイスを宣言しないでください [編集] 問題のオブジェクトがデータ転送オブジェクト(DTO)またはプレーンオールドデータ(POD)を表す場合 それは合理的なガイドラインですか? これまで、不変の(データを変更できない)シールクラスのインターフェイスを作成することがよくありました。私は、不変性を気にするところにはインターフェースを使用しないように注意しました。 残念ながら、インターフェイスはコードに浸透し始めます(心配しているのは私のコードだけではありません)。インターフェースを渡された後、渡されるものが不変であると本当に想定したいコードにそれを渡したいと思うでしょう。 この問題のため、不変オブジェクトのインターフェイスを宣言しないことを検討しています。 これは単体テストに関して悪影響があるかもしれませんが、それ以外に、これは合理的なガイドラインに思えますか? または、私が見ている「拡散インターフェース」の問題を回避するために使用すべき別のパターンがありますか? (私はこれらの不変オブジェクトをいくつかの理由で使用しています:主にスレッドセーフのために、私は多くのマルチスレッドコードを書いていますが、それはまた、メソッドに渡されるオブジェクトの防御的なコピーの作成を避けることができるためです。コードは何かが不変であることを知っている多くの場合-インターフェイスを渡された場合はそうではありません。実際、インターフェイスを介して参照されるオブジェクトの防御コピーを作成することさえできません。クローン操作またはそれをシリアル化する方法...) [編集] オブジェクトを不変にしたいという私の理由により多くのコンテキストを提供するには、Eric Lippertの次のブログ投稿を参照してください。 http://blogs.msdn.com/b/ericlippert/archive/tags/immutability/ また、ここでは、マルチスレッドジョブキューで操作/受け渡しされるアイテムなど、いくつかの低レベルの概念で作業していることを指摘する必要があります。これらは本質的にDTOです。 また、Joshua Bloch は、著書Effective Javaで不変オブジェクトの使用を推奨しています。 ファローアップ フィードバックをありがとう、すべて。先に進み、このガイドラインをDTOとその同類に使用することにしました。これまでのところ順調に機能していますが、1週間しか経っていません...それでも、見栄えは良いです。 これに関連する他の問題がいくつかあります。特に私が「ディープまたはシャロー不変性」と呼んでいるもの(ディープアンドシャロークローンから盗んだ命名法)-しかし、それはまた別の質問です。
27 c#  immutability 

1
ドメインイベントを使用するか、アプリケーションレイヤーにすべてを調整させるかの選択方法
ドメイン駆動設計への最初のステップを設定し、ブルーブックとすべてを購入しました。特定のソリューションを実装するための3つの方法を見ています。記録のために:私はCQRSまたはイベントソーシングを使用していません。 ユーザーリクエストがアプリケーションサービスレイヤーに入ってきたとします。その要求のビジネスロジックは(何らかの理由で)エンティティ上のメソッドとドメインサービス上のメソッドに分けられます。これらのメソッドを呼び出すにはどうすればよいですか? これまでに収集したオプションは次のとおりです。 アプリケーションサービスが両方のメソッドを呼び出すようにします メソッドインジェクション/ダブルディスパッチを使用して、ドメインサービスをエンティティにインジェクトし、エンティティに実行させてからドメインサービスのメソッドを呼び出します(または逆に、ドメインサービスがエンティティのメソッドを呼び出すようにします) エンティティメソッドでドメインイベントを発生させ、そのハンドラーがドメインサービスを呼び出します。(私が話しているドメインイベントの種類は、http://www.udidahan.com/2009/06/14/domain-events-salvation/です) これらはすべて実行可能だと思いますが、どちらかを選択することはできません。私はこれについて長い間考えていましたが、3つのセマンティックの違いがもはや見られなくなるまでになりました。何を使うべきかのガイドラインを知っていますか?

7
ArgumentNullExceptionのスローはどのように役立ちますか?
メソッドがあるとしましょう: public void DoSomething(ISomeInterface someObject) { if(someObject == null) throw new ArgumentNullException("someObject"); someObject.DoThisOrThat(); } を投げることArgumentNullExceptionは「正しい」と信じるように訓練されていますが、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」エラーはバグがあることを意味します。 どうして? 参照をキャッシュsomeObjectして後で使用する場合は、渡されたときに無効性をチェックし、早期に失敗する方が良いことを知っています。ただし、次の行でそれを間接参照している場合、なぜチェックを行うことになっていますか?何らかの方法で例外をスローします。 編集: それはちょうど私に起こりました...逆参照されたnullの恐怖は、あなたをチェックしないC ++のような言語に由来しますか?
27 c#  null 

9
メソッドで#regionタグに人々が強く反対しているのはなぜですか?
メソッドを短くすることについて多くのことを聞き、多くのプログラマーが、メソッド内で#regionタグを使用することは、それが長すぎて複数のメソッドにリファクタリングする必要があることの確かな兆候だと言うことを聞きました。ただし、メソッド内で#regionタグでコードを分離することが、複数のメソッドにリファクタリングするための優れたソリューションである多くの場合があるように思えます。 計算を3つの異なるフェーズに分割できるメソッドがあるとします。さらに、これらの各段階はこのメソッドの計算にのみ関係するため、新しいメソッドに抽出してもコードの再利用はできません。それでは、各フェーズを独自のメソッドに抽出することの利点は何ですか?私が知る限り、私たちが得るのは、読みやすさと、各フェーズの個別の変数スコープです(これにより、特定のフェーズの変更が誤って別のフェーズを壊さないようにすることができます)。 ただし、これらの両方は、各フェーズを独自のメソッドに抽出することなく実現できます。リージョンタグを使用すると、コードを同じように読みやすい形式に折りたたむことができ(コードを展開して調査することにした場合に、このファイルに場所を残す必要がなくなるという追加の利点があります)、単純に各フェーズをラップします{}動作する独自のスコープを作成します。 この方法で行う利点は、実際には4番目のメソッドの内部動作にのみ関連する3つのメソッドでクラスレベルのスコープを汚染しないことです。長いメソッドをすぐに一連の短いメソッドにリファクタリングすることは、時期尚早な最適化と同等のコード再利用のように思えます。多くの場合決して発生しない問題に対処するために、余分な複雑さを導入しています。コードの再利用の機会が生じた場合、後からいつでも独自のメソッドにフェーズの1つを抽出できます。 考え?
27 c#  coding-style 

1
関数を呼び出して、C#で待機しない
mvc4 Webアプリケーションに、別の関数を呼び出す必要があるアクションがあるコントローラーがあります。その関数で何が起こるか、つまり戻り値は私のアクションにとって重要ではありません。その関数を呼び出して、実行されるのを待つことはできませんか? 私はそれを非同期で行うことができると思いますが、私のポイントはリソースを使用せず、関数を呼び出して、それが起こるまで待つことはありません。 アドバイスをください。
26 c#  .net  asp.net  asp.net-mvc 

4
ライブラリのC#名前空間とクラスの命名規則
C#でさまざまな小さなユーティリティ関数を使用してライブラリを構築し、名前空間とクラスの命名規則を決定しようとしています。私の現在の組織は次のようなものです。 Company Company.TextUtils public class TextUtils {...} Company.MathsUtils public class MathsUtils {...} public class ArbitraryPrecisionNumber {...} public class MathsNotation {...} Company.SIUnits public enum SISuffixes {...} public class SIUnits {...} これは名前空間とクラスを整理するのに良い方法ですか、それとももっと良い方法がありますか?特に、名前空間とクラス名(Company.TextUtils名前空間とTextUtilsクラスなど)に同じ名前を付けることは単なる重複であり、スキームがより良い可能性を示唆しています。
26 c#  naming  namespace 

1
コード分​​析の目的は何ですか?いつ使用する必要がありますか?
Visual Studioのコード分析について聞いたことがありますが、使用しませんでした。私はMSDNを読みましたが、それでもコード分析の実際の使用法を理解していません。 StyleCopと同じではありませんか? どこかで、FxCopも言及されました。コード分​​析との違いは何ですか? すべてのプロジェクトでコード分析を使用する必要がありますか?同僚が行ったコードレビューは不十分ですか?

5
テスト用にプライベートなものを内部/公開にするか、PrivateObjectのようなハックを使用しますか?
私はコードテストの初心者であり、assert以前は売春婦でした。ユニットテストで私を心配していることの1つは、そうでなければそうであったpublic(または少なくともinternal)フィールドを作成し、それらprivateを解除readonlyし、代わりにprivateメソッドprotected virtualを作成するなどが必要になることが多いということです... 私は最近、PrivateObjectクラスのようなものを使用して、リフレクションを介してオブジェクト内のすべてにアクセスすることで、これを回避できることを発見しました。しかし、これにより、テストの保守性が低下します(コンパイル時ではなく実行時に失敗します。単純な名前変更によって破損し、デバッグが難しくなります...)。これについてのあなたの意見は何ですか?アクセス制限に関する単体テストのベストプラクティスは何ですか? 編集:たとえば、ディスク上のファイルにキャッシュを持つクラスがあり、テストでは代わりにメモリに書き込むことを検討してください。
26 c#  unit-testing 

9
コンパイラの警告を無効にする必要があるのはなぜですか?
この回答とそれに追加されたコメントは、#pragmaディレクティブを使用していくつかのコンパイラ警告を無効にする方法を示しています。 なぜそれをしたいのでしょうか?通常、警告は理由があるので、私は常にそれらが正当な理由だと感じています。警告を無効にする「有効なケース」はありますか?今は何も考えられませんが、多分それは私だけです。
26 c#  c++  c  warnings 

20
C#を第一言語として学ぶのは間違いですか?[閉まっている]
ここにも似たような質問があることは知っていますが、最近読んだことがありますが、最近、Joel Spolskyによるこの投稿を読みました。 プログラミング経験のない明るい人に、どのようにプログラミングを教えることができますか? そして、自分の学習方法と、それが長期的には実際に有害かどうかを考えさせられました。 私はさまざまな言語に手を出しましたが、C#は私の最初の真剣な言語です。「Head First C#」を読み、いくつかのプロジェクトを作成しました。しかし、上記の投稿を読んだ後、私はそれがすべて間違っていることを少し落胆させたことがわかりました。明らかに、私は少し私を投げたジョエルの意見を尊重します。 読書リストで推奨されているように「コード」を読み始めたので、楽しいものの、かなり難しいと感じています。Visual Studioでの「悪意のあるハッキング」の輝きを取り除いたように感じます。 だから今、私はどの道を取るべきかわからないのですか?一歩下がって、ジョエルのアドバイスに従い、読み始めるべきですか? 私の主な目的は、他のすべての人と同じように良いプログラマーになることだけだと思いますが、尊敬する人がそれが有害であると考える場合、。 考え?
26 c# 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.