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

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

6
C#のPascalケーシングメソッド名の背後にある哲学/理由は何ですか?
この質問は、Software Engineering Stack Exchangeで回答できるため、Stack Overflowから移行されました。 8年前に移行され ました。 私はちょうどC#を学び始めています。Java、C ++、Objective-Cのバックグラウンドから来ると、C#のPascalのケースはメソッド名がかなりユニークで、最初は慣れるのが少し難しいと思います。この背後にある理由と哲学は何ですか? 私はそれがC#プロパティのためだと推測しています。メソッド名がインスタンス変数とまったく同じになるObjective-Cとは異なり、C#の場合はそうではありません。プロパティを使用する目標の1つは(プロパティをサポートするほとんどの言語の場合と同様)、プロパティを変数やメソッドとまったく区別できないものにすることです。したがって、C#で「int x」を使用すると、対応するプロパティがXになります。プロパティとメソッドを区別できないようにするため、推測するすべてのメソッド名も大文字で始まることが予想されます。(これは、これまでC#について知っていたことに基づいた私の仮説であり、まだ学習中です)。私はこの好奇心の強いガイドラインがどのように生まれたのか知りたいと思っています( (編集:Pascal-casingとは、PascalCaseを意味します(基本的にはcamelCaseですが、大文字で始まります。ほとんどの言語では、メソッド名は通常小文字で始まります)。

3
C#8のnull不可の参照とTryパターン
Dictionary.TryGetValueandで例示されるC#クラスにはパターンがありint.TryParseます。操作の成功を示すブール値と実際の結果を含む出力パラメーターを返すメソッド。操作が失敗した場合、outパラメーターはnullに設定されます。 C#8のnull不可の参照を使用しており、自分のクラスのTryParseメソッドを記述したいとします。正しい署名はこれです: public static bool TryParse(string s, out MyClass? result); falseの場合、結果はnullであるため、out変数はnull可能としてマークする必要があります。 ただし、一般的にTryパターンは次のように使用されます。 if (MyClass.TryParse(s, out var result)) { // use result here } 操作が成功したときにのみブランチに入るため、そのブランチで結果がnullになることはありません。しかし、null可能としてマークしたので、それを確認するか!、オーバーライドに使用する必要があります。 if (MyClass.TryParse(s, out var result)) { Console.WriteLine("Look: {0}", result.SomeProperty); // compiler warning, could be null Console.WriteLine("Look: {0}", result!.SomeProperty); // need override } これは見苦しく、少し人間工学的ではありません。 典型的な使用パターンのため、別のオプションがあります:結果タイプについてうそをつきます: public static …
22 c#  .net  null 

4
多対多(ジャンクション)テーブルに一意のID列が必要ですか?
EFでいくつかのプロジェクトを開始しましたが、結合テーブルやキーなどについて質問がありました。アプリケーションのテーブルと権限のテーブルがあるとします。アプリケーションには多くの権限があり、各権限は多くのアプリケーション(多対多)に属することができます。 これで、アプリケーションテーブルとアクセス許可テーブルが簡単になりました。 Applications -------------- PK ApplicationID Name Permissions -------------- PK PermissionID Name しかし、結合テーブルを実行する最良の方法は何ですか?次の2つのオプションがあります。 ApplicationPermissions ----------------------- PK ApplicationPermissionID CU ApplicationID CU PermissionID または ApplicationPermissions ----------------------- CPK ApplicationID CPK PermissionID PK = Primary Key CPK = Composite Primary Key CU = Composite Unique Index ある方法で他の方法よりもやけどをしたことがありますか?それは厳密に好みですか?リポジトリパターンによって多くの「違い」が抽象化されることがわかりました(たとえば、アクセス許可オブジェクト全体を作成してアプリケーションに追加することはほとんどありませんが、IDまたは一意の名前または何か)、しかし、私はホラーストーリーを探していると思います。

3
クラスまたはモジュールはいつ独立したアセンブリ/ DLLに配置する必要がありますか?
クラスを独自のアセンブリ/ DLLに含めるタイミングを決定するためのガイドラインはありますか?私はしばしば二つの考え方を目にします: 1)クラスのすべての「グループ化」は、リポジトリ、サービス、DTO、インフラストラクチャなどの独自のDLLに属します。 2)すべてが単一のDLLにある必要がありますが、名前空間/フォルダーを介して分離する必要があります。たとえば、Core.Repositories、Core.Services、Core.DTOなどの追加の名前空間を持つ「Core」DLLが必要です。 仕事では、すべてを「ビジネス」と呼ばれる単一のアセンブリにまとめます。いくつかのフォルダーがありますが、本当の分離はありません。ビジネスオブジェクト(ロジックを含む、その一部はクラスであってはならない)は、「BusinessObjects」フォルダーに注意せずにまとめられます。複数のクラスで使用されるものは、「コア」フォルダーにあります。ユーティリティは「ユーティリティ」フォルダにあり、データアクセスインフラストラクチャは「データ」フォルダです。 私が取り組んでいる新しいモジュールの場合、個別のデータアクセスレイヤーが必要です(基本的なリポジトリ実装を考えてください)が、他の160(!)そこのクラス。同時に、誰もが単一のライブラリにクラスを詰め込むことに慣れているため、新しいクラスライブラリの作成について心配しています。ただし、フォルダ/ネームスペースは機能します。

3
C#でこの見かけの自己参照の目的は何ですか?
私のプロジェクトの1つで使用するためのPiranha(http://piranhacms.org/)と呼ばれるオープンソースCMSを評価しています。少なくとも私にとっては、次のコードが興味深く、少し混乱していることがわかりました。クラスが同じ型のベースから継承している理由を理解するのに役立つことがありますか? public abstract class BasePage<T> : Page<T> where T : BasePage<T> { /// <summary> /// Gets/sets the page heading. /// </summary> [Region(SortOrder = 0)] public Regions.PageHeading Heading { get; set; } } クラスBasePage<T>が定義されている場合、なぜ継承するのPage<T> where T: BasePage<T>ですか?どのような特定の目的に役立ちますか?
21 c#  architecture  .net  cms 

4
C#7で「Try」メソッドを記述する最もエレガントな方法は何ですか?
TryDequeueさまざまな.NET TryParseメソッドに似たパターンを使用するメソッドを持つタイプのQueue実装を記述していoutます。アクションが成功した場合はブール値を返し、パラメーターを使用して実際のデキューされた値を返します。 public bool TryDequeue(out Message message) => _innerQueue.TryDequeue(out message); 今、私outはできる限りparams を避けるのが好きです。C#7では、変数のデリケートが提供され、それらの操作が簡単になりますが、paramsは有用なツールよりも必要な悪であると考えています。 このメソッドに必要な動作は次のとおりです。 デキューするアイテムがあれば、それを返します。 デキューするアイテムがない場合(キューが空の場合)、適切に機能するのに十分な情報を発信者に提供します。 アイテムが残っていない場合、nullアイテムを返すだけではいけません。 空のキューからデキューしようとしても例外をスローしないでください。 現在、このメソッドの呼び出し元は、ほとんど常に次のようなパターンを使用します(C#7 out変数構文を使用)。 if (myMessageQueue.TryDequeue(out Message dequeued)) MyMessagingClass.SendMessage(dequeued) else Console.WriteLine("No messages!"); // do other stuff 最悪ではない、とすべてが語った。しかし、私はこれを行うためのより良い方法があるかもしれないと感じずにはいられません(私はまったくないことを完全に喜んで認めています)。値があればそれを取得したいときに、呼び出し側が条件付きフローを分割する方法が嫌いです。 この同じ「試行」動作を達成するために存在する他のパターンは何ですか? コンテキストでは、このメソッドはVBプロジェクトで呼び出される可能性があるため、両方でうまく機能するものに対するボーナスポイントです。ただし、この事実はあまり重要ではありません。
21 c# 

4
定義としてC#の抽象クラスを使用する
C ++開発者として、私はC ++ヘッダーファイルに非常に慣れており、コード内に何らかの「ドキュメント」を強制することが有益であることがわかりました。そのため、私は通常、C#コードを読む必要があるときに悪い時間を過ごします。私が作業しているクラスのそのようなメンタルマップを持っていません。 ソフトウェアエンジニアとして、プログラムのフレームワークを設計していると仮定しましょう。C ++ヘッダーで行うのと同様に、すべてのクラスを抽象的な未実装クラスとして定義し、開発者に実装させるのはあまりにもクレイジーでしょうか? 誰かがこれをひどい解決策だと思う理由がいくつかあるのではないかと推測していますが、その理由はわかりません。このようなソリューションでは、何を考慮する必要がありますか?

1
Goは「暗黙の」インターフェースで生産性をどのように改善しますか。また、C#の拡張メソッドの概念と比較してどうですか。
Go言語のチュートリアルでは、インターフェイスの仕組みについて説明しています。 Goにはクラスがありません。ただし、構造体型のメソッドを定義できます。メソッドのレシーバは、 FUNCキーワードとメソッド名の間に独自の引数リストに表示されます。 type Vertex struct { X, Y float64 } func (v *Vertex) Abs() float64 { return math.Sqrt(v.X*v.X + v.Y*v.Y) } インターフェイスタイプは、一連のメソッドによって定義されます。インターフェイスタイプの値は、これらのメソッドを実装する任意の値を保持できます。 これは、Goでインターフェイスを作成する唯一の方法です。Googleはさらに次のように説明しています。 型は、メソッドを実装することによりインターフェースを実装します。意図の明示的な宣言はありません[ interface宣言]。 暗黙的なインターフェースは、実装パッケージをインターフェースを定義するパッケージから分離します。どちらも他に依存しません。 また、すべての実装を見つけて新しいインターフェイス名でタグ付けする必要がないため、正確なインターフェイスの定義も推奨されます。 これはすべて、Goのメソッドが容赦なく多態的であることを除いて、C#の拡張メソッドに似ています。それらは、それらを実装する任意のタイプで動作します。 Googleは、これが急速な開発を促進すると主張していますが、なぜですか?C#の明示的なインターフェイスから離れることで何かをあきらめますか?C#の拡張メソッドにより、GoインターフェイスがC#に持つ利点のいくつかを引き出すことができますか?
21 c#  language-design  go 

3
過度のモッキングが必要なため、脆弱な単体テスト
私は、チームで実装しているユニットテストに関して、ますます厄介な問題に取り組んでいます。うまく設計されていないユニットコードをレガシーコードに追加しようとしていますが、実際にテストを追加するのに苦労することはありませんが、テストの結果に苦労し始めています。 問題の例として、実行の一部として5つの他のメソッドを呼び出すメソッドがあるとしましょう。このメソッドのテストは、これらの5つのメソッドのいずれかが呼び出された結果として動作が発生することを確認することです。そのため、単体テストは1つの理由と1つの理由でのみ失敗するはずなので、これらの他の4つのメソッドを呼び出して発生する潜在的な問題を排除し、それらをモックアウトする必要があります。すばらしいです!単体テストが実行され、モックされたメソッドは無視され(その動作は他の単体テストの一部として確認できます)、検証が機能します。 しかし、新しい問題があります-単体テストには、今後、他の4つのメソッドのいずれかに対する動作とシグネチャの変更、または「親メソッド」に追加する必要のある新しいメソッドの確認方法に関する詳細な知識があります。失敗の可能性を回避するために、単体テストを変更する必要があります。 当然のことながら、より多くのメソッドがより少ない動作を達成するようにするだけで、問題を多少軽減できますが、おそらくよりエレガントなソリューションが利用できることを望んでいました。 問題をキャプチャする単体テストの例を次に示します。 簡単なメモとして、「MergeTests」は単体テストクラスであり、テストしているクラスから継承し、必要に応じて動作をオーバーライドします。これは、外部クラス/依存関係への呼び出しをオーバーライドできるようにするためにテストで使用する「パターン」です。 [TestMethod] public void VerifyMergeStopsSpinner() { var mockViewModel = new Mock<MergeTests> { CallBase = true }; var mockMergeInfo = new MergeInfo(Mock.Of<IClaim>(), Mock.Of<IClaim>(), It.IsAny<bool>()); mockViewModel.Setup(m => m.ClaimView).Returns(Mock.Of<IClaimView>); mockViewModel.Setup( m => m.TryMergeClaims(It.IsAny<Func<bool>>(), It.IsAny<IClaim>(), It.IsAny<IClaim>(), It.IsAny<bool>(), It.IsAny<bool>())); mockViewModel.Setup(m => m.GetSourceClaimAndTargetClaimByMergeState(It.IsAny<MergeState>())).Returns(mockMergeInfo); mockViewModel.Setup(m => m.SwitchToOverviewTab()); mockViewModel.Setup(m => m.IncrementSaveRequiredNotification()); mockViewModel.Setup(m => …

7
本番環境でのユーザーアクションのログ記録のベストプラクティス
この質問は、Software Engineering Stack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 私は、ユーザーが次のような場合など、実稼働環境でさまざまなものをログに記録することを計画していました。 ログイン、ログオフ プロフィールを変更 アカウント設定を編集する パスワードを変更...など これは生産環境で行うのに良い習慣ですか?また、これをすべて記録する良い方法は何ですか。現在、次のコードブロックを使用してログに記録しています。 public void LogMessageToFile(string msg) { System.IO.StreamWriter sw = System.IO.File.AppendText( GetTempPath() + @"MyLogFile.txt"); try { string logLine = System.String.Format( "{0:G}: {1}.", System.DateTime.Now, msg); sw.WriteLine(logLine); } finally { sw.Close(); } } これは本番でも大丈夫ですか?私のアプリケーションは非常に新しいので、数百万人のユーザーがすぐに何も期待することはなく、ウェブサイトでのアクションを追跡するためのベストプラクティスを探しています。
21 c#  asp.net  logging 

5
非表示に関して、C#の「新しい」修飾子の実用的な用途は何ですか?
同僚と私はnew、隠蔽の概念に適用されるC#のキーワードの動作を見ていました。ドキュメントから: 新しい修飾子を使用して、基本クラスから継承されたメンバーを明示的に非表示にします。継承されたメンバーを非表示にするには、同じ名前を使用して派生クラスで宣言し、新しい修飾子で変更します。 ドキュメントを読み、基本的に何をするのか、どのように行うのかを理解しています。本当に手に入れることができなかったのは、最初にそれを行う必要がある理由です。修飾子は2003年から存在しており、私たち2人はそれよりも長い間.Netを使用してきました。 この動作が実用的な意味で必要になるのはいつですか(例:ビジネスケースに適用される場合)。これは、その有用性よりも長持ちした機能ですか、それとも私たちがやっていること(具体的には、WebフォームとMVCアプリケーション、およびいくつかの小さな要素のWinFormsとWPF)であまり一般的ではありませんか?このキーワードを試してみて、それを試してみたところ、誤用されると少し危険に思える動作が見つかりました。 これは少し無制限に聞こえますが、この特定のツールが有用であるとわかるビジネスアプリケーションに適用できる特定のユースケースを探しています。
21 c#  keywords 

5
ASP.NETアプリの背後にあるクライアント側のJavascriptとC#コードの間でデータを渡す方法
ASP.NETアプリケーションの背後にあるクライアント側のJavaScriptコードとC#コードの間でデータを渡す最も効率的で標準的な方法を探しています。私はこれを達成するために以下の方法を使用しましたが、それらはすべてちょっとしたファッジを感じます。 JavaScriptからC#コードにデータを渡すには、非表示のASP変数を設定してポストバックをトリガーします。 <asp:HiddenField ID="RandomList" runat="server" /> function SetDataField(data) { document.getElementById('<%=RandomList.ClientID%>').value = data; } 次に、C#コードでリストを収集します。 protected void GetData(object sender, EventArgs e) { var _list = RandomList.value; } 別の方法に戻ると、どちらかのScriptManagerを使用して関数を登録し、Page_Load中にデータを渡すことがよくあります。 ScriptManager.RegisterStartupScript(this.GetType(), "Set","get("Test();",true); または、ポストバックの前、または初期化または事前レンダリングの段階で、コントロールに属性を追加します。 Btn.Attributes.Add("onclick", "DisplayMessage("Hello");"); これらの方法は私に役立って仕事をしてくれましたが、完全ではありません。クライアント側のJavaScriptとC#バックエンドコード間でデータを渡すより標準的な方法はありますか? HtmlElementクラスを説明するこのような投稿を見てきました。これは私が検討すべきものですか?

5
静的クラスを名前空間として使用する
この質問は、Software Engineering Stack Exchangeで回答できるため、Stack Overflowから移行されました。 8年前に移行され ました。 名前空間として静的クラスを使用している他の開発者を見てきました public static class CategoryA { public class Item1 { public void DoSomething() { } } public class Item2 { public void DoSomething() { } } } public static class CategoryB { public class Item3 { public void DoSomething() { } } public …

7
恐ろしいC#プログラミングインタビューテスト-何かアドバイスはありますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 4年前に閉鎖されました。 私はC#開発の仕事を揃えていますが、面接する前に、雇用機関とのテストに合格する必要があります。 今、私は10年以上のプログラミング経験があり、C#で3年以上の経験がある上級開発者ですが、このテストを本当に楽しみにしていません。失敗する可能性が十分にあると思います。 私の経験では、これらのテストは、日常の仕事の状況でめったに使用しないものを尋ねることは予測できません。 良い本やウェブサイトなど、私が何を修正すべきかについて、あなたの最善のアドバイスが必要です。準備するのに1週間もかからず、これに合格することが不可欠です。 前もって感謝します。 編集:このようなテストを書くことに関する私の懸念をさらに正当化するために、次の質問を検討してください。 12)イベントは: a) The result of a users action - correct answer b) The esult of a party c) code to force users action テストによると正解はAですが、私はSOA開発を行ってきたので(多くの場合、イベントはシステムイベント(ユーザーアクションではない)に基づいている場合があるため)、イベントを駆動する必要がないことは100%確信していますこれはC#の質問でもありました(ASP.netの質問ではありません)私の理解に基づいて、私は本当に正しい答えを見つけることができませんでしたが、Bは最高のようです(パーティーの定義が:この種の質問は私を怖がらせます。
21 c#  interview 

9
ストアドプロシージャにビジネスロジックを配置するかどうか。
この質問は、Software Engineering Stack Exchangeで回答できるため、Stack Overflowから移行されました。 8年前に移行され ました。 「ビジネスロジックをストアドプロシージャに入れるかどうか」というトピックについては常に議論があります。ORMツールを使用せず、ビジネスロジックをストアドプロシージャに入れないことにした場合、どこにビジネスロジックを入れますか? 以前のアプリケーションでは、すべてのビジネスロジックをストアドプロシージャにのみ配置することを常に好みました。次に、.NETコードから、データアクセスアプリケーションブロックを使用してこれらのストアドプロシージャを呼び出します。SQLHelperなど。しかし、これは常にシナリオになることはできません。だから私はいくつかのグーグルをしましたが、混乱してしまいました....... 何か提案...?
21 c#  .net  sql 

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