1

別のアセンブリで Entity Framework エンティティを EF エンティティに拡張する拡張クラスを作成しようとしています。また、(T4 を使用して) 拡張メソッド クラスでいくつかの追加/ジェネリック メソッドを生成し、追加のカスタム メソッドを使用して部分的な拡張メソッド クラスを作成できるようにしたいと考えています。これは可能ですか?

4

3 に答える 3

3

それらは必要ありません。別の拡張クラスを作成するだけです。

namespace Namespace1
{
    public static class MyEntityBlibblingExtensions
    {
        public void Blibble(this MyEntity self)
        {
            // ...
        }
    }
}

その後、別の場所で...

namespace Namespace2
{
    public static class MyEntityFurtlingExtensions
    {
        public void Furtle(this MyEntity self)
        {
            // ...
        }
    }
}

インポートNamespace1すると拡張メソッドが表示され、Blibble()インポートすると拡張メソッドNamespace2が表示さFurtle()れ、両方をインポートすると両方が表示されます。MyEntityそれらは、別のアセンブリにある場合もあれば、の名前空間をインポートする場所にある場合もあります。したがって、部分拡張は実際には有効な概念ではありません。実際、拡張メソッドをクラス内に配置するという考えそのものが、ちょっとしたハックです。C# のルールを十分に曲げて、拡張メソッドをクラスの外に置くことができなかったのは残念です。

于 2012-05-30T07:44:13.043 に答える
2

ここで見られる主な問題は、「別のアセンブリで」というフレーズです。partial classそうでない場合は、通常のインスタンスメソッドを使用してメソッドなどを追加するだけで問題ありません。

静的な部分クラスを持つことはできますが、部分クラスを使用して別のアセンブリの型に追加することはできません。拡張メソッドは部分クラスから正常に機能しますが、部分クラスは純粋に異なるファイル間でコードを分割するためのメカニズムであることに注意してください。拡張メソッド用に複数の静的クラスを簡単に作成できます。

于 2012-05-30T07:41:55.860 に答える
2

はい - 私はそれを試してみましたが、うまくいきました。

「拡張」クラスのようなものはありません。「静的」クラス内にある必要がある拡張メソッドのみがあります。

静的部分クラスを持つことができます。

更新: 申し訳ありませんが、あなたの見出しを読みましたが、質問のテキストは読みませんでした。答えはイエスですが、なぜ新しいクラスを作成しないのでしょうか? この場合、部分クラスを持つことが実際にどのように役立つかわかりません。

于 2012-05-30T07:40:11.163 に答える