1

ここでこの質問を読みました:

LINQtoSQL によって生成されたクラスで空のコンストラクターをオーバーライドする方法はありますか?

通常、私のコンストラクターは次のようになります。

 public User(String username, String password, String email, DateTime birthday, Char gender)
    {
        this.Id = Guid.NewGuid();
        this.DateCreated = this.DateModified = DateTime.Now;
        this.Username = username;
        this.Password = password;
        this.Email = email;
        this.Birthday = birthday;
        this.Gender = gender;
    }

ただし、その質問で読んだように、代わりに部分メソッド OnCreated() を使用して値を割り当て、デフォルトのコンストラクターを上書きしないようにします。さて、私はこれを手に入れました:

partial void OnCreated()
{       
        this.Id = Guid.NewGuid();
        this.DateCreated = this.DateModified = DateTime.Now;
        this.Username = username;
        this.Password = password;
        this.Email = email;
        this.Birthday = birthday;
        this.Gender = gender;
}

ただし、これにより2つのエラーが発生します。

Partial Methods must be declared private.
Partial Methods must have empty method bodies.

Private Sub OnCreated()さて、これらのエラーの両方を削除するために変更します。しかし、私はまだ立ち往生しています...通常のカスタムコンストラクターと同じように値を渡すにはどうすればよいですか? また、私はVBでこれを行っています(C#を最もよく知っている/好むので変換しました)ので、これに影響がありますか?

4

2 に答える 2

1

に値を渡すことはできませんOnCreated。あなたがリンクした質問は、デフォルトのコンストラクターの動作をオーバーライドすることに関係しています。次のようなパラメーター化されたコンストラクターを使用したいようです。

Public Sub New(username as String, password as String, email as String, birthday as DateTime, gender as Char)
  User.New()

  Me.Id = Guid.NewGuid()
  Me.DateCreated = this.DateModified = DateTime.Now
  Me.Username = username
  Me.Password = password
  Me.Email = email
  Me.Birthday = birthday
  Me.Gender = gender
End Sub

次のような新しいユーザーを作成しますか?

 Dim u as User = new User()

またはこのように:

 Dim u as User = new User("Name", "Password", "Email", etc)
于 2010-04-15T22:41:14.890 に答える
0

VB を使用する場合、実装を としてマークするのではなくPartial、単に としてマークする必要がありますPrivate。次の例を見てください。

Private Sub OnCreated()
    ' Your code here'
End Sub
于 2010-04-15T20:02:24.757 に答える