2010-04-15 3 views
1

я прочитал этот вопрос здесь:LINQtoSQL Пользовательский конструктор с частичным классом?

Is there a way to override the empty constructor in a class generated by 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; 
} 

Однако, это дает мне две ошибки:

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

Alright я изменить его Private Sub OnCreated() удалить оба этих ошибок. Тем не менее, я все еще придерживаюсь ... как я могу передать его значения, как с обычным пользовательским конструктором? Также я делаю это в VB (преобразовал его, поскольку я знаю, что большинство знает/предпочитаю C#), так что это повлияет на это?

ответ

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) 
+0

Ah okay Я не думал об этом User.New(), я просто пытался создать свой собственный конструктор, но потом, когда я попытался сохранить этот объект, он потерпел неудачу, потому что он не содержал много вещей, которые автоматически генерировал класс требуется конструктор по умолчанию. Благодаря! – SventoryMang

+1

Я просто хотел добавить, что 'User.New()' не работает, вы получаете следующую ошибку: вызов конструктора действителен только как первый оператор в конструкторе экземпляра. Вместо этого, похоже, работает 'Me.New()' – SventoryMang

+0

Извините - я действительно не очень хорошо знаю VB. Надеюсь, вы добрались до Me.New() довольно быстро. –

0

При использовании VB вы не должны отмечать реализацию как Partial, а просто как Private. Посмотрите на следующий пример:

Private Sub OnCreated() 
    ' Your code here' 
End Sub 
+0

Да, я прокомментировал это в сообщении, что не решает то, что я пытаюсь выполнить, хотя это и передается некоторым значением в OnCreated, как в типичном пользовательском конструкторе. – SventoryMang

Смежные вопросы