Как создать экземпляр унаследованного класса без вызова базового конструктора по умолчанию - PullRequest
0 голосов
/ 25 апреля 2020

просто любопытно. У меня есть пользовательский класс хранилища идентификаторов asp. net, который наследует класс IdentityUser. Это определяется следующим образом:

public class ApplicationUser : IdentityUser
{
    public ApplicationUser()
    {

    }
}

Обратите внимание, что я не вызываю базовый конструктор явно.

Я знаю, что даже когда я не вызываю базовый конструктор явно, он вызывается неявно.

Я продемонстрировал это при отладке. Когда я просто вхожу в конструктор ApplicationUser, Id член базового класса уже содержит значение, равное некоторой строке GUID.

Это происходит из конструктора базового класса, который я видел с помощью отражения:

public IdentityUser()
{
  this.Id = Guid.NewGuid().ToString();
}

Есть ли какое-то решение?

В моем пользовательском хранилище пользователей идентификатор является целочисленным первичным ключом, но я задаю его значением из базы данных на более позднем этапе, поэтому не имеет значения, является ли этот GUID назначен этому члену по умолчанию, но мне интересно, можно ли этого избежать. Может быть, наследуя от других классов и реализуя другой интерфейс: IdentityUser<string, IdentityUserLogin, IdentityUserRole, IdentityUserClaim>, IUser, IUser<string> заменив string на int.

Есть какие-либо комментарии по этому поводу?

С уважением

Jaime

1 Ответ

0 голосов
/ 25 апреля 2020

Звучит так, будто вы хотите сделать что-то хакерское.
Я одобряю; вот вам go.

var user = (ApplicationUser)FormatterServices.GetUninitializedObject(typeof(ApplicationUser));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...