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

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

3
共通の機能を共有するWindowsフォームに最適な設計
過去に、アプリケーションでWindowsフォームの拡張を許可するために継承を使用しました。すべてのフォームに共通のコントロール、アートワーク、および機能がある場合、共通のコントロールと機能を実装する基本フォームを作成し、他のコントロールがその基本フォームから継承できるようにします。ただし、その設計にはいくつかの問題があります。 コントロールは一度に1つのコンテナにしか入れることができないため、静的なコントロールは扱いにくいものになります。たとえば、このクラスの他の(派生)インスタンスがすべて同じTreeViewを変更および表示できるように、保護および静的にするTreeViewを含むBaseFormというベースフォームがあるとします。TreeViewは一度に1つのコンテナにしか入れることができないため、これはBaseFormから継承する複数のクラスでは機能しません。おそらく初期化された最後のフォームにあります。すべてのインスタンスはコントロールを編集できますが、一度に1つだけ表示されます。もちろん、回避策はありますが、それらはすべていものです。(これは私にとって本当に悪い設計のようです。なぜ複数のコンテナが同じオブジェクトへのポインタを格納できないのでしょうか?とにかく、それがそうです。) フォーム間の状態、つまり、ボタンの状態、ラベルテキストなど、グローバル変数を使用して、Loadの状態をリセットする必要があります。 これは、Visual Studioのデザイナーによって実際にサポートされていません。 使用するのに優れた、それでも簡単に保守可能な設計はありますか?または、フォームの継承が依然として最善のアプローチですか? 更新 MVCからMVPに、オブザーバーパターンからイベントパターンに移動しました。ここに私が今考えているものがあります、批評してください: BaseFormクラスには、コントロールと、それらのコントロールに接続されたイベントのみが含まれます。それらを処理するために何らかのロジックが必要なすべてのイベントは、すぐにBaseFormPresenterクラスに渡されます。このクラスは、UIからのデータを処理し、論理演算を実行してから、BaseFormModelを更新します。モデルは、状態の変更時に発生するイベントをPresenterクラスに公開し、Presenterクラスはサブスクライブ(または監視)します。プレゼンターはイベント通知を受け取ると、ロジックを実行し、それに応じてビューを変更します。 メモリには各Modelクラスが1つしかありませんが、BaseFormの多くのインスタンス、したがってBaseFormPresenterが存在する可能性があります。これにより、BaseFormの各インスタンスを同じデータモデルに同期するという私の問題が解決します。 質問: どのレイヤーが最後に押されたボタンのようなものを保存する必要があるので、フォーム間でユーザーのために強調表示し続けることができます(CSSメニューのように)? このデザインを批判してください。ご協力いただきありがとうございます!

2
実行時に取得される型からクラスを動的に生成する
C#(または他の言語)で次のことを行うことは可能ですか? データベースからデータを取得しています。実行時に、列の数とフェッチされた列のデータ型を計算できます。 次に、これらのデータ型をフィールドとしてクラスを「生成」します。また、コレクションにフェッチしたすべてのレコードを保存します。 問題は、実行時にステップ1と2の両方を実行することです。 これは可能ですか?現在C#を使用していますが、必要に応じて他の何かに移行できます。

3
C#は実際にはマルチプラットフォーム言語ですか?
この質問はして移行され、それがソフトウェア工学スタック所に答えることができるので、スタックオーバーフローから。 8年前に移行され ました。 C#(および一般的な.netプラットフォーム)は、マルチターゲティングアプリからの優れたオプションになりつつあるようです。 公式MS .netフレームワーク:フルブローウィンドウ開発、asp.net開発、Windows Phone開発など モノとそのすべての派生物:モノタッチ、モノドロイド:世界の残り。このツールは現在RTMです。 これは、C#がデスクトップ、Web、モバイルなどの最も人気のあるプラットフォームをターゲットとするための優れた言語になりつつあることを意味していますか? ターゲットプラットフォームの「ネイティブ」言語(客観的なC、Javaなど)を使用するのがさらに良いですか? それはただの煙幕であり、唯一のマーケティング言語ですか? プラットフォーム間でコードをコピー/貼り付けできないことを実際に意識していることに注意してください。しかし、アプリケーション(モデル、ビジネスなど)の下位層は再利用できると確信していますが、プラットフォームに上位層(Guiなど)を適応させる必要があることは知っています。私の目標は、技術的なコードの共有よりも必要なスキルに重点を置いています。 [編集]私は c#を大量に使用する会社のac#開発者です。そのため、会社のターゲットプラットフォームの範囲を拡大する計画でC#について話しました。
20 c#  mono  monodroid 

7
プログラマは、高レベル言語での低レベルソフトウェア開発にどのように対処しますか?
私はプログラミングにやや慣れていないので、この質問に答える最良の方法は例です。 JavaとC#で基本的なことを行う方法を知っています。小さなウィンドウのようなものは、アプリケーションを形成するか、汎用クラスを作成します。私は基本的に学習してきましたが、まだ大きなことをしようとはしていません。とにかく、「フードの下で」物事がどのように行われるかについて、私はいつも興味がありました。 私はそれがすべて1と0に煮詰められ、アセンブリ言語が基本的に1と0のパターンにコマンドを与えることを知っていますが、そこからこのジャンプがあるようです:これにライブラリを使用してください ライブラリを使用せずにすべてのC#でできることは、算術およびバイナリロジックです。入力または出力を取得するには、ライブラリなどを使用します... おそらくこの質問は一部の人には自明であり、学ぶべきことがたくさんあることは知っていますが、このような質問からどこから始めればよいかさえわかりません。ありがとうございました。 だから私の質問はこれです: 誰かが仮想マシンやプレイステーションエミュレーター、オペレーティングシステム、ドライバーを作成したり、メディアプレーヤーにmp3サポートを追加したり、独自のファイルタイプを作成したりした場合... C#またはJavaでどのように行われるかわかりません。 言い換えると、WROXのProfessional C#やOReillyのC#のプログラミングのような本を読んだ場合、これらの方法を知っていますか?それとも、アセンブリ言語や、C ++のようなより低レベルのものを学ぶ必要がありますか?

4
GUIプログラミング用のDelphiとC#[終了]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 私はCの知識がほとんどないPHPとPythonのバックグラウンドから来ています。Windowsプラットフォーム用のデスクトップアプリケーションを考えているので、多くのWebベースのアプリケーションを作成しました。 友達がデルファイに行くように言ってくれて、他の人はC#が最高だと言っている、まあ、私が探しているのは シンプルさ 生産性 優れたAPIドキュメント 速度 ドラッグアンドドロップ マルチスレッドと優れたネットワークAPI ありがとう
20 c#  delphi 

3
パブリックメンバーを仮想化または抽象化しないでください-本当にですか?
2000年代に、私の同僚は、パブリックメソッドを仮想または抽象化するのはアンチパターンだと言っていました。 たとえば、彼は次のようなクラスはうまく設計されていないと考えました。 public abstract class PublicAbstractOrVirtual { public abstract void Method1(string argument); public virtual void Method2(string argument) { if (argument == null) throw new ArgumentNullException(nameof(argument)); // default implementation } } 彼は言った 実装Method1およびオーバーライドする派生クラスの開発者はMethod2、引数の検証を繰り返す必要があります。 場合には、基本クラスの開発者は、カスタマイズの一部の周りに何かを追加することを決定しMethod1たりMethod2、後で、彼はそれを行うことはできません。 代わりに、私の同僚がこのアプローチを提案しました: public abstract class ProtectedAbstractOrVirtual { public void Method1(string argument) { if (argument == null) throw new …

7
パターンと原理の違い
この質問は、Software Engineering Stack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 オブジェクト指向のデザインパターンと原則の違いは何ですか?それらは異なるものですか?私が理解している限り、両方とも共通の目標(柔軟性など)を達成しようとします。パターンは原則であり、その逆も言えると思いますか? 設計原理= SOLID(つまり、依存関係反転の原理) デザインパターン= Gof(抽象ファクトリーパターン)

3
例外に関する追加情報を提供するにはどうすればよいですか?
例外に関する追加情報を提供する必要があるたびに、実際にこれを行う正しい方法はどれかと思います。 この質問のために、例を作成しました。Abbreviationプロパティを更新するクラスがあると仮定しましょう。SOLIDの観点からは完全ではないかもしれませんが、DIを介してワーカーメソッドをいくつかのサービスで渡しても同じ状況が発生します-コンテキストが存在しないという例外が発生します。例に戻る... class Person { public int Id { get; set; } public string Name { get; set; } public string Abbreviation { get; set; } } 次に、クラスのインスタンスと、worker-methodが呼び出されるループがあります。それは投げることができStringTooShortExceptionます。 var persons = { new Person { Id = 1, Name = "Fo" }, new Person { Id = 2, Name = …
20 c#  exceptions 

1
インターフェイスの実装に関するドキュメントの複製/オーバーライドの良し悪し
だから私たちはそのようなインターフェイスを持っています /// <summary> /// Interface for classes capable of creating foos /// </summary> public interface ICreatesFoo { /// <summary> /// Creates foos /// </summary> void Create(Foo foo); /// <summary> /// Does Bar stuff /// </summary> void Bar(); } 最近、私たちは、上記のようなXML文書がたくさんあることを生成し、確認することを含む文書の話をしました。しかし、これはドキュメントの多くの重複を引き起こしました。実装例: /// <summary> /// A Foo Creator which is fast /// </summary> …

2
誰が最初に非同期/待機しましたか?
Pythonは、2015年に3.5でasync / awaitコンストラクトを追加しました。Javascriptコミュニティは、数千年にわたってそれに向かって一歩を踏み出し、最終的に2017年にリリースされたES8のドラフトに非常によく似た実装を追加しました(私の理解から)。Typescriptは、2015年にバージョン1.7の非同期メソッドを追加しました。これは、訓練されていない目にはjs非同期メソッドとまったく同じように見えます。 C#2012年にasync / awaitの他のすべての実装のように見える非同期メソッドを追加し、2010年にF#2.0で導入されたF#の同様に動作するが外観の異なる非同期ワークフローに基づいていました。 -非同期/待機ペアを持つC#および非同期フローを持つF#。 言語コンストラクト(またはライブラリ)としてこのコンテキストで使用されているキーワードの以前の例はありますか?私の限られた情報から、誰もがC#実装の良い部分を模倣したように見えますが、C#は他の誰かからそれをコピーしましたか?

3
ラッパーは、同じオブジェクトをラップするときに==演算子を使用して等しいと比較する必要がありますか?
開発者がXMLから属性を簡単に解析できるようにするXML要素のラッパーを書いています。ラッパーには、ラップされるオブジェクト以外の状態はありません。 ==オペレーターのオーバーロードを含む次の実装(この例では簡略化)を検討しています。 class XmlWrapper { protected readonly XElement _element; public XmlWrapper(XElement element) { _element = element; } public string NameAttribute { get { //Get the value of the name attribute } set { //Set the value of the name attribute } } public override bool Equals(object other) { var o …
19 c#  .net  operators 

8
TryGetValueよりもC#辞書を使用するより良い方法はありますか?
私はよくオンラインで質問を探しますが、多くのソリューションには辞書が含まれています。しかし、それらを実装しようとするたびに、コードにこの恐ろしい悪臭が入ります。たとえば、値を使用するたびに: int x; if (dict.TryGetValue("key", out x)) { DoSomethingWith(x); } これは、基本的に次のことを行う4行のコードです。 DoSomethingWith(dict["key"]) outキーワードを使用すると、関数のパラメーターが変化するため、アンチパターンであると聞きました。 また、キーと値を反転させる「逆」辞書が必要になることがよくあります。 同様に、辞書の項目を繰り返し処理して、キーまたは値をリストなどに変換して、これを改善したいと思うことがよくあります。 辞書を使用するより良い、よりエレガントな方法はほとんど常にあるように感じますが、私は途方に暮れています。

8
C#-フィールドのプレフィックスが推奨されないのはなぜですか?
昔、私たちはハンガリー語表記をしていました。これは今ではpasséと見なされており、ほとんどの場合はもう使用していませんが、m_メンバーフィールドを示すためにプレフィックスを使用することはまだあります。 私にとって、他の誰かのコードを読んでいると、私はこれを見る: count = 3; 私はそれcountがその関数のローカル変数であると仮定し、関数の他の場所で使用される何かをしています。私がこれを見たら: m_count = 3; オブジェクトの状態を更新していることにすぐに気付きます。 マイクロソフトのスタイルガイドラインでは、それが物事を行う間違った方法であると述べています。関数内で定義された一時変数とまったく同じ非公開フィールドに名前を付けることになっています。いいえm_、単純なアンダースコアですらありません。 はい、独自のコーディングスタイルを定義することはできますが、その後、さまざまな静的コード分析ツールに取り組み、物事のやり方が問題ないことを説得する必要があります。 マイクロソフトのスタイルに変更できてうれしいですが、なぜそうなっているのかを知りたいです。 変数が関数ローカルであるかメンバーであるかを判断できるのはなぜ悪いと考えられるのですか? PSこれは、C#のフィールドとメソッドの前にある「this」キーワードに関して現在考えられているベストプラクティスと非常に似ていますか?、しかし私は聞いてm_いないthis. PPSまた、Microsoftがパラメーター、ローカル変数、およびプライベートフィールドに同じ名前の命名規則を付けた理由を参照してください。


2
コンストラクターで[Pure]を使用する場合
.NETのコードコントラクトについて学び、純粋なコンストラクターの概念を理解しようとしています。コードの契約ドキュメントの状態: コントラクト内で呼び出されるすべてのメソッドは純粋でなければなりません。つまり、既存の状態を更新してはなりません。純粋メソッドでは、純粋メソッドへのエントリ後に作成されたオブジェクトを変更できます。 そして、PureAttributeドキュメントの状態: 型またはメソッドが純粋であること、つまり、目に見える状態の変更を行わないことを示します。 メソッドに関してはこれらのステートメントを理解していますが、コンストラクターはどうですか?次のようなクラスがあったとします: public class Foo { public int Value { get; set; } public Foo(int value) { this.Value = value; } } このコンストラクターは明らかに新しいFooオブジェクトの状態に影響しますが、他の副作用はありません(たとえば、パラメーターを操作したり、非純粋なメソッドを呼び出したりしません)。これは候補者[Pure]ですか?[Pure]コンストラクターに属性を配置することの意義は何ですか?また、自分のコードでこれをいつ行う必要がありますか?

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