1

次のように、LINQtoSQLによって生成された部分クラス User があります。

    [global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.[User]")]
public partial class User : INotifyPropertyChanging, INotifyPropertyChanged
{

    private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
 ...

次に、プロジェクトに別のフォルダー「Proxy」を作成し、そこに追加の User クラスを配置しました。

namespace LINQtoSQL_sample.Proxy
{
    public partial class User
    {
        public static string GetActivationUrl()
        {
            return Guid.NewGuid().ToString("N");
         ...

同じプロジェクトの別の部分から追加の静的メソッドを呼び出そうとすると、問題が発生します。「SqlRepositoryImpl」というフォルダーがもう 1 つあり、そこに別の部分クラスがあるとします。

namespace LINQtoSQL_sample.SqlRepositoryImpl
{
    public partial class SqlRepository
    {
        public bool CreateUser(User instance)
        {
            if (instance.ID == 0)
            {
                instance.added_date = DateTime.Now;
                instance.activated_link = LINQtoSQL_sample.Proxy.User.GetActivationUrl();
              ...

ご覧のとおり、呼び出している User クラスの部分を明示的に定義しました。これは、IntelliSense が追加のメソッドを提案しなかったためです。

なぜそのようなことが起こるのか、どこが間違っているのか教えてください。

4

1 に答える 1

2

ご覧のとおり、IntelliSense が追加のメソッドを提案しなかったため、呼び出している User クラスの部分を明示的に定義しました。

クラスからメソッドを呼び出すと、クラスの「部分」はなくなります。

クラスからメソッドを呼び出すためにクラスの完全な名前空間を指定する必要がある (そしてできる) 場合、それは実際には 2 つの異なる名前空間に 2 つの異なるクラスがあることを意味します。2 つのpartial宣言が異なる名前空間にある場合、2 つの部分から 1 つのクラスを宣言するのではなく、実際には 2 つの別個のクラスを宣言したことになります。

于 2013-09-09T00:12:53.300 に答える