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

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

6
単一の.csファイル内の複数のクラス-良いか悪いか?[閉まっている]
.csファイル内に複数のクラスを作成することをお勧めしますか、それとも各.csファイルに個別のクラスが必要ですか? 例えば: public class Items { public class Animal { } public class Person { } public class Object { } } これが良いアーキテクチャの貧弱な例であるという事実を少し避けて、.csファイルに複数のクラスがあることはコード臭いですか?
30 c#  code-smell 

5
(たとえば、bool / intの代わりに)voidを使用する必要がある場合と理由
開発者が関数にとって重要ではない何かを返すことを選択したメソッドに時々出くわします。つまり、コードを見ると、どうやら同じように機能しているように見えvoid、少し考えてから「なぜ?」これはおなじみですか? 時には、単にaを実行するのではなく、boolまたはのようなものを返す方が良い場合が多いことに同意します。しかし、全体像では、賛否両論についてはわかりません。intvoid 状況によっては、an intを返すことにより、呼び出し側はメソッドの影響を受ける行またはオブジェクトの量を知ることができます(たとえば、5つのレコードがMSSQLに保存されます)。「InsertSomething」のようなメソッドがブール値を返すtrue場合、成功した場合、そうでない場合に返すように設計されたメソッドを持つことができますfalse。発信者は、その情報に基づいて行動するかどうかを選択できます。 一方、 メソッド呼び出しのあまり明確でない目的につながる可能性がありますか?悪いコーディングはしばしばメソッドの内容を再確認せざるを得ません。何かを返す場合、メソッドは返された結果で何かをしなければならない型であることを知らせます。 もう1つの問題は、メソッドの実装が不明な場合、開発者は機能的に重要ではないものを返すことにしたのですか?もちろんコメントできます。 メソッドの閉じ括弧で処理を終了できる場合、戻り値を処理する必要があります。 ボンネットの下で何が起こりますか?falseスローされたエラーのために、呼び出されたメソッドは取得されましたか?または、評価結果のためにfalseを返しましたか? これについてのあなたの経験は何ですか?これにどのように対応しますか?

5
ネストされたクラスを使用するタイミングと理由
オブジェクト指向プログラミングを使用すると、クラス(ネストされたクラス)内にクラスを作成することができますが、4年のコーディング経験でネストしたクラスを作成したことはありません。 ネストされたクラスは何に適していますか? クラスは、ネストされている場合、プライベートとしてマークでき、そのクラスのすべてのプライベートメンバーに包含クラスからアクセスできることを知っています。変数を含むクラス自体に変数をプライベートとして置くことができます。 では、なぜネストされたクラスを作成するのでしょうか? ネストされたクラスはどのシナリオで使用する必要がありますか、または他の手法よりも使用法の点でより強力ですか?

7
未処理の例外を処理する方法は?(アプリケーションを終了するか、生き続けるか)
デスクトップアプリケーションで未処理の例外が発生した場合のベストプラクティスは何ですか? ユーザーがサポートに連絡できるように、ユーザーにメッセージを表示しようと考えていました。ユーザーにアプリケーションを再起動することをお勧めしますが、強制することはしません。ここで説明しているものと同様:ux.stackexchange.com-予期しないアプリケーションエラーを処理する最良の方法は何ですか? プロジェクトは.NET WPFアプリケーションであるため、説明されている提案は次のようになります(これは簡略化された例です。ユーザーが[詳細の表示]をクリックして、エラーを簡単に報告してください): public partial class App : Application { public App() { DispatcherUnhandledException += OnDispatcherUnhandledException; } private void OnDispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e) { LogError(e.Exception); MessageBoxResult result = MessageBox.Show( $"Please help us fix it and contact support@example.com. Exception details: {e.Exception}" + "We recommend to restart the application. " + …

4
C#6.0の新しいnull条件演算子は、Demeterの法則に反しますか?
デメテルの法則は次のように述べています: 各ユニットは、他のユニットに関する限られた知識のみを持つ必要があります。現在のユニットに「密接に」関連するユニットのみです。 各ユニットは、その友人とのみ会話する必要があります。見知らぬ人と話をしないでください。 身近な友達とだけ話してください。 C#6.0では、null-conditional operatorと呼ばれる新しい演算子が導入されました。私見、それはコーディングを容易にし、読みやすさを向上させます。ただし、クラスフィールドをナビゲートするのが簡単で、すでにヌル(のようなものvar x = A?.B?.C?.D?.E?.F?)をチェックしているため、より結合されたコードを簡単に記述できます。 この新しいオペレーターがデメテルの法則に反すると述べるのは正しいですか?

6
新しいオブジェクトを作成するか、すべてのプロパティをリセットしますか?
public class MyClass { public object Prop1 { get; set; } public object Prop2 { get; set; } public object Prop3 { get; set; } } のオブジェクトmyObjectがMyClassあり、そのプロパティをリセットする必要があるとします。新しいオブジェクトを作成するか、各プロパティを再割り当てする方が良いでしょうか?古いインスタンスで追加の使用法がないと仮定します。 myObject = new MyClass(); または myObject.Prop1 = null; myObject.Prop2 = null; myObject.Prop3 = null;

5
Java / C#でRAIIを実装できないのはなぜですか?
質問:Java / C#でRAIIを実装できないのはなぜですか? 明確化:ガベージコレクターは決定論的ではないことを認識しています。そのため、現在の言語機能では、オブジェクトのDispose()メソッドをスコープの終了時に自動的に呼び出すことはできません。しかし、そのような決定論的な機能を追加できますか? 私の理解: RAIIの実装は、次の2つの要件を満たす必要があると感じてい ます。1.リソースの有効期間はスコープにバインドされている必要があります。 2.暗黙的。リソースの解放は、プログラマーによる明示的なステートメントなしで行われる必要があります。明示的なステートメントなしでメモリを解放するガベージコレクターに似ています。「暗黙性」は、クラスの使用ポイントでのみ発生する必要があります。もちろん、クラスライブラリの作成者は、デストラクタまたはDispose()メソッドを明示的に実装する必要があります。 Java / C#はポイント1を満たします。C#では、IDisposableを実装するリソースを「using」スコープにバインドできます。 void test() { using(Resource r = new Resource()) { r.foo(); }//resource released on scope exit } これはポイント2を満たしません。プログラマは、オブジェクトを特別な「使用」スコープに明示的に結び付けなければなりません。プログラマーは、リソースをスコープに明示的に結び付けることを忘れる可能性があり(実際にそうします)、リークを作成します。 実際、「使用中」ブロックは、コンパイラーによってtry-finally-dispose()コードに変換されます。try-finally-dispose()パターンと同じ明示的な性質を持っています。暗黙のリリースがなければ、スコープへのフックは構文糖衣です。 void test() { //Programmer forgot (or was not aware of the need) to explicitly //bind Resource to a scope. Resource r …

11
基本クラスと同じファイルでインターフェイスを宣言するのは良い習慣ですか?
交換可能かつテスト可能であるためには、通常、ロジックを備えたサービスにインターフェースが必要です。 public class FooService: IFooService { ... } 設計面ではこれに同意しますが、このアプローチで気になる点の1つは、1つのサービスに対して2つのもの(クラスとインターフェース)を宣言する必要があり、チームでは通常2つのファイル(1つクラス用とインターフェイス用)。IDE(VS2010)で[定義に移動]を使用すると、実際のクラスではなくインターフェイス(他のクラスがインターフェイスを参照するため)を指すため、ナビゲーションの難しさがもう1つあります。 FooServiceと同じファイルにIFooServiceを記述すると、上記の奇妙さが軽減されると考えていました。結局、IFooServiceとFooServiceは非常に関連しています。これは良い習慣ですか?IFooServiceを独自のファイルに配置する必要がある正当な理由はありますか?

6
単体テストの期待される結果はハードコーディングされるべきですか?
単体テストの期待される結果をハードコーディングする必要がありますか、それとも初期化された変数に依存できますか?ハードコードまたは計算された結果は、単体テストでエラーを導入するリスクを高めますか?私が考慮していない他の要因はありますか? たとえば、これら2つのうち、どちらがより信頼性の高い形式ですか? [TestMethod] public void GetPath_Hardcoded() { MyClass target = new MyClass("fields", "that later", "determine", "a folder"); string expected = "C:\\Output Folder\\fields\\that later\\determine\\a folder"; string actual = target.GetPath(); Assert.AreEqual(expected, actual, "GetPath should return a full directory path based on its fields."); } [TestMethod] public void GetPath_Softcoded() { MyClass target = …
29 c#  unit-testing 

3
オプションのパラメーターまたはオーバーロードされたコンストラクター
を実装しDelegateCommandていますが、コンストラクターを実装しようとしていたときに、次の2つの設計の選択肢を思いつきました。 1:複数のオーバーロードされたコンストラクターを持つ public DelegateCommand(Action<T> execute) : this(execute, null) { } public DelegateCommand(Action<T> execute, Func<T, bool> canExecute) { this.execute = execute; this.canExecute = canExecute; } 2:オプションのパラメーターを持つコンストラクターを1つだけ持つ public DelegateCommand(Action<T> execute, Func<T, bool> canExecute = null) { this.execute = execute; this.canExecute = canExecute; } どちらを使用するかわからないのは、提案された2つの方法のいずれかにどのような利点/欠点があるかわからないからです。両方とも次のように呼び出すことができます: var command = new DelegateCommand(this.myExecute); var command2 = …

8
C#Generics-冗長な方法を避ける方法
次のような2つのクラスがあると仮定しましょう(コードの最初のブロックと一般的な問題はC#に関連しています)。 class A { public int IntProperty { get; set; } } class B { public int IntProperty { get; set; } } これらのクラスは、いかなる方法でも変更できません(これらは、サードパーティアセンブリの一部です)。したがって、同じインターフェイスを実装したり、IntPropertyを含む同じクラスを継承したりすることはできません。 IntProperty両方のクラスのプロパティにいくつかのロジックを適用したいのですが、C ++ではテンプレートクラスを使用してそれを非常に簡単に行うことができました。 template <class T> class LogicToBeApplied { public: void T CreateElement(); }; template <class T> T LogicToBeApplied<T>::CreateElement() { T retVal; retVal.IntProperty = 50; return retVal; …
28 c#  generics 

6
Generic Repositoryには本当に利点がありますか?
新しいアプリ用の汎用リポジトリを作成する利点に関するいくつかの記事を読んでいました(例)。同じリポジトリを使用して、複数の異なるエンティティタイプに対して複数の処理を一度に実行できるため、このアイデアは素晴らしいようです。 IRepository repo = new EfRepository(); // Would normally pass through IOC into constructor var c1 = new Country() { Name = "United States", CountryCode = "US" }; var c2 = new Country() { Name = "Canada", CountryCode = "CA" }; var c3 = new Country() { Name = "Mexico", …

15
2つのプログラミング言語を行き来するのは賢明ですか?[閉まっている]
私は2年近く、かなり多くのPHPを書いてきました。現在、.NET(主にc#)開発を行っています。ただし、時々戻ってphpを実行します。 私の主な質問は、これを続けるのが賢明なのか、C#での開発を続けるべきなのか、ということです。これは長期的に私に害を及ぼすでしょうか(私の主な目標はすべての取引のジャックになることではないことに注意してください)、またはそれを行うことは良い習慣ですか?

4
インターセプトとインジェクション:フレームワークアーキテクチャの決定
私が設計を支援しているこのフレームワークがあります。いくつかの一般的なコンポーネントを使用して実行する必要があるいくつかの一般的なタスクがあります。特に、イベントのロギング、キャッシュ、および発生 依存関係の注入を使用してこれらのすべてのコンポーネントを各サービスに(たとえばプロパティとして)導入する方がよいのか、サービスの各メソッドに何らかの種類のメタデータを配置し、インターセプトを使用してこれらの一般的なタスクを実行するのか? 以下に両方の例を示します。 注入: public class MyService { public ILoggingService Logger { get; set; } public IEventBroker EventBroker { get; set; } public ICacheService Cache { get; set; } public void DoSomething() { Logger.Log(myMessage); EventBroker.Publish<EventType>(); Cache.Add(myObject); } } そして、ここに他のバージョンがあります: 傍受: public class MyService { [Log("My message")] [PublishEvent(typeof(EventType))] public void DoSomething() …

14
プログラミング全般に関するアドバイスを求めている初心者[非公開]
プログラミングが苦手だった時代に戻って覚えておく必要があります... (ソフトウェア開発者として)私の新しい仕事に2か月ほど付き、試用期間を過ぎました。プログラミング経験がほとんどなく(C ++のみ)、現在asp.net MVCおよびsilverlightを使用しています。そのため、同社が取り組んでいるウェブサイトがあり、私はそれを改善し、バグを取り除くなどの努力に参加しています。 問題は-既に作成されているシステム/ウェブサイトについて、Visual Studioを介して学習することです。いつも圧倒され、この行のどの部分を調べるべきか分からず、全体像をつかむのに苦労します。Visual Studio自体は、asp.netフレームワークは言うまでもなく、把握するのが難しいと感じています。 私の同僚は私よりも多くの経験を持っているので、彼らはすべての良い仕事を得ているという印象を受けます。つまり、彼らはより多くのことを学んでいます。私は士気を失い、何も言えないほど怖がっています。 私は愚かではありません、私は多くの基本的なプログラミングの概念を読んで実践しました...私はこのいまいましいフレームワークをただ怖がっています。私はそれを見て、ただ麻痺していると感じます。 その結果、ベテランの老人に質問をし続け、彼はいらいらするようになり、私を助けて時間を無駄にしないように、簡単/無知/非プログラミングの仕事を与えたいと思っています。それから私は何かを理解できないとき、私はまだ彼に尋ねるべきかどうかをaboutし、それが時間の無駄になるかどうかを決定しようとしています。 私は物事をゆっくりと拾うような人ですが、細部にまで気を配っています。前者は私が無能に見えるようにしていると思います。 私がどこから来たのか誰でも助けて何か言ってください....私は数ヶ月か何かで仕事を失うのが怖い...

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