Di API Inti ASP.NET saya, saya memiliki kelas DTO BaseBDto
dan DerivedBDto
lain yang mewarisinya, dan menyembunyikan beberapa propertinya, karena diperlukan di DerivedBDto
. Properti BaseBDto
dan DerivedBDto
adalah objek dari kelas lain, masing-masing BaseADto
dan DerivedADto
, yang mengikuti logika yang sama seperti yang pertama. Saya juga memiliki kelas BaseModel
dimana BaseBDto
dan DerivedBDto
akan dipetakan melalui kelas lain Mapper
.
Sesuatu seperti kode berikut:
using System.ComponentModel.DataAnnotations;
public class BaseADto
{
public string Name { get; set; }
}
public class DerivedADto : BaseADto
{
[Required]
public new string Name { get; set; }
}
public class BaseBDto
{
public BaseADto A { get; set; }
}
public class DerivedBDto : BaseBDto
{
[Required]
public new DerivedADto A { get; set; }
}
public class BaseModel
{
public string NameModel { get; set; }
}
public static class Mapper
{
public static BaseModel MapToModel(BaseBDto dto) => new BaseModel
{
NameModel = dto.A.Name
};
}
Namun ternyata, saat meneruskan objek DerivedBDto
ke metode MapToModel
, objek tersebut mencoba mengakses nilai BaseBDto
(yaitu null
) dan bukan nilai DerivedBDto
.
Apakah ada cara saya bisa mencapai perilaku ini?
Saya hanya dapat mendeklarasikan BaseBDto
sebagai abstrak, tetapi hal itu akan mencegah saya membuat instance, yang perlu saya lakukan.
PS: Saya sudah menanyakan pertanyaan serupa di sini, tapi saya terlalu menyederhanakan contoh kode saya, jadi saya merasa perlu ada pertanyaan lain. Selain itu, solusi yang diberikan di sana tidak berfungsi karena saya tidak dapat mengganti properti A di DerivedBDto
dengan DerivedADto
karena harus memiliki tipe yang sama dengan properti A di BaseBDto
.
virtual
danoverride
untuk mengubah kesalahan kompilasi. - person Luis Costa   schedule 22.01.2020