Доступ к скрытому свойству в базовом классе c# - PullRequest
2 голосов
/ 21 января 2020

В моем ASP. NET Core API у меня есть класс DTO BaseDto и еще один DerivedDto, который наследуется от BaseDto и скрывает некоторые его свойства, поскольку они требуются в DerivedDto , У меня также есть класс BaseModel, в который BaseDto и DerivedDto будут отображаться через другой класс Mapper.

Что-то вроде следующего кода:

using System.ComponentModel.DataAnnotations;

public class BaseDto
{
    public string Name { get; set; }
}

public class DerivedDto : BaseDto
{
    [Required]
    public new string Name { get; set; }
}

public class BaseModel
{
    public string NameModel { get; set; }
}

public static class Mapper
{

    public static BaseModel MapToModel(BaseDto dto) => new BaseModel
    {
        NameModel = dto.Name
    };
}

Но оказывается, при передаче объекта DerivedDto методу MapToModel он пытается получить доступ к значениям BaseDto (которые null) вместо DerivedDto.

Есть ли способ, которым я могу достичь этого поведения?

Я могу думать только о том, чтобы объявить BaseDto абстрактным, но это помешало бы мне создать его экземпляр, что мне нужно сделать.

1 Ответ

2 голосов
/ 21 января 2020

Вам необходимо объявить свойство класса BaseDto как виртуальное, а затем переопределить его в классе DerivedDto следующим образом:

public class BaseDto
{
    public virtual string Name { get; set; }
}

public class DerivedDto : BaseDto
{
    public override string Name { get; set; }
}

Кроме того, исправьте метод класса Mapper. В BaseModel отсутствует свойство Name. Это должно быть "NameModel = dto.Name"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...