問題タブ [partial-classes]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 部分クラスの使用
メモリ、パフォーマンスなどの場合に部分クラスを使用するオーバーヘッドはありますか?
部分的なクラスを作成する場合、リフレクターを使用してクラスが部分的であるかどうかを識別できますか?
.net - .NET部分クラスと継承
さて、ここに社内にユーティリティがあり、データベースのテーブルとビューからビジネスモデルクラスを生成します。これは、ORMに似ています(ただし、まったく同じではありません)。それを維持する際に、スキーマ内のデータが大幅に変更される可能性は低いと思いました。ただし、機能は可能性があります。今後、機能を追加したいと思うかもしれません。その機能の一部を生成したい場合や、拡張したい場合があります。
構築しているクラスは、他のライブラリやアプリケーションで使用できるようにクラスライブラリに常駐します。そこには大きな驚きはありません。しかし、ここでの難点は、クラスを再生成するときにコードをできるだけ中断しないように、生成されたクラスを設計する方法です。たとえば、コードがプロパティ(データベーステーブルの列を表す)に追加されている場合、それを失いたくありません。
したがって、頭に浮かぶ2つのアプローチがあります。
古典的な継承。すべてが単一の「モノリシック」クラスで行われ、コンシューマーは基本実装を自由にオーバーライドできます。ただし、これは時々トリッキーになり、キャストの頭痛の種になることがよくあります。さらに、派生クラスが注意を怠り、基本クラスの機能を呼び出すのを忘れると、問題がすぐに発生する可能性があります。
部分クラス。このスキームでは、ビジネスオブジェクトを個別の部分(プロパティ(列にマップされる)と動作)に分割します。ビヘイビアーは、生成されたビヘイビアーとカスタムビヘイビアーにさらに分類することもできます。ご覧のとおり、このアプローチの問題は、その固有の複雑さです。さらに、命名の問題があります。
これが皆さんへの私の質問です:あなたがこのようなシナリオを扱っているとき(もしあれば)、またはあなたがこのようなシナリオを提示された場合、あなたはどのような解決策を考えますか、そしてその理由は何ですか?
c# - 抽象クラスとは対照的に、部分クラスを使用する利点は何ですか?
私は、ProgrammingMicrosoft®VisualC#®2008:The Languageを読んで、C#とそれを使って何ができるかをよりよく理解しています。ASP.NetのPageクラスからすでに遭遇した部分的なクラスに出くわしました。
私には、部分クラスが抽象クラスとオーバーライドされたクラスで行うことを実行できるようです。明らかに、1つのチームが抽象メソッドを介してインターフェースを制御しますが、とにかくお互いに依存することになります。そして、目標がコラボレーションである場合、ソース管理や他のツールが解決するのはそれではありません。
部分的なクラスのポイントが欠けています。また、誰かが実際の使用法を提供することもできます。
linq-to-sql - linqtosql部分DataContextクラスの実装-前後の値を検査する方法
VSデザイナによって生成されたlinqtosqlクラスを拡張しようとしていますが、特定のフィールドの値が変更されたかどうかを判断する必要があります。テーブル/エンティティのDataContextUpdateメソッドのフィールドの前後の値にアクセスする方法はありますか?
これが私のコードです:
また、Activityエンティティクラスにプロパティを追加して、値が変更されたかどうかを通知することもできますが、値が変更されたかどうかを確認する方法もわかりません。ActivityクラスのOnAssignedToChangedメソッドを使用することはできません。これは、プロパティ値が設定されるたびに発生し、必ずしも変更される必要がないためです。更新にListViewおよびLINQDataSourceコントロールを使用しているので、何があっても設定されます。
また、OnAssignedToChangingメソッドを使用できるかもしれないと思いましたが、Activityインスタンスにはその時点で現在の値がないようです。次のコードはこのようには機能しません。AssignedToは常にnullです。
c# - C# 部分クラス
複数のファイルと異なる名前空間で C# の部分クラスをプログラミングするにはどうすればよいですか?
c# - xsd で生成されていない部分クラスに DebuggerStepThroughAttribute が適用されないようにしますか?
xsd.exe ツールを使用して、xml スキーマに基づいてクラスを生成しました。DebuggerStepThroughAttribute を使用して public 部分クラスを作成しました。さて、このクラス用に別の部分クラス ファイルを作成してカスタム コードを記述し、記述したこのコードにステップ インできるようにしたいと考えていますが、デバッガーがステップ スルー属性を部分クラスにも適用しているようです。部分クラスを再生成するたびに属性を手動で削除せずにコードにステップインする簡単な方法はありますか?
c# - Entity Framework: 生成されたデータ オブジェクト例外のカスタマイズ
Entity Framework が作成した生成済みデータ クラスの 1 つにプロパティを追加しようとしています。別の生成されたクラスでまったく同じことを問題なく実行しましたが、何らかの理由でこのクラスでは機能しません。
生成された 2 つのオブジェクトの唯一の違いは、1 つは単純なテーブル マッピング (機能するオブジェクト) であり、もう 1 つは別のオブジェクトから継承される (機能しないオブジェクト) ことです。言い換えれば、1 つのテーブルは 2 つのエンティティを表し、いくつかの基準に基づいて、それを抽象化し、2 つの継承エンティティを作成しました...
次に、次のプロパティを追加しました...
ReportPropertyChanged が呼び出されると、次の例外がスローされます。
System.ArgumentException: プロパティ 'SerialNumber' には、エンティティ オブジェクトに対する有効なエンティティ マッピングがありません。詳細については、Entity Framework のドキュメントを参照してください。
スローしない別の生成されたデータ クラスに IDENTICAL コードがあります。唯一の違いは継承です。何が起こっているのですか??
c# - 変換クラスの拡張性 (拡張メソッド vs 部分クラス)
頻度の変換クラスを作成していますが、チームが必要に応じて変換を追加できるようにしたいと考えていました。
クラスのソース コードは将来のプロジェクトに含まれないため、クラスを部分クラスにするか、追加の変換を拡張する必要があります。例として、GHz への変換を追加します。
これを進める最善の方法はどれですか?
更新:ランドルフォの回答を読んだ後、拡張メソッドのアプローチを使用します。時間が許せば、拡張機能はベース コードに組み込まれますが、他のチーム メンバーが更新されたアセンブリを待つ必要がなかったので、次のタスクに少し早く移行できるようになりました。
validation - 生成された部分クラスへの DataAnnonations の追加
別の部分クラスのいくつかのメソッドで拡張した Subsonic3 Active Record 生成の部分 User クラスがあります。
ある部分クラスのメンバー プロパティにデータ注釈を追加できるかどうかを知りたいのですが、これを試した他のサブソニック生成クラスで宣言されています。
その例では、「メンバーは既に定義されています」というエラーが発生します。
Dynamic Data と Linq2Sql でやろうとしていることの例を少し前に見たことがあると思います。
c# - C#:部分クラスのプロパティのデフォルト値を設定する方法は?
私はC#に非常に慣れていないので、ご容赦ください...
私は部分クラスを実装しており、次のように 2 つのプロパティを追加したいと考えています。
IsSomething
toTrue
とSomeList
toの両方のデータ メンバーを初期化したいと思いますnew List<string>()
。通常はコンストラクターで行いますが、これは部分クラスであるため、コンストラクターには触れたくありません (すべきでしょうか?)。
これを達成するための最良の方法は何ですか?
ありがとう
PS私はASP.NET MVCで作業しており、特定のモデルに機能を追加しているため、部分クラスです。