01/10/2018, 10:04

Không muốn override getter, setter từ superclass

Mình có 1 class Model như sau:

 public class A
  {
                [System.ComponentModel.DataAnnotations.Key]
                [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
                public long Id { get; set; }
                
                public virtual int FAQType 
               {
                   get
                  {
                    return _FAQType;
                  }
                  set
                  {
                      _FAQType = value;
                  }
              }

                protected int _FAQType;
  }

Và class ViewModel kế thừa từ Model

public class B: A
{
     [Required]
     public override int FAQType  { get; set; }
}

Mình gặp vấn đề là khi sử dụng FAQType của lớp B thì nó không kế thừa từ getter, setter của class A
Do mục đích của mình tạo ra lớp B là để chỉ chưa các data annotation để validation và mình không muốn getter, setter ở lớp B bị override
Cho mình hỏi có cách nào để FAQType sử dụng getter, setter của lớp A không ?

ACP viết 12:13 ngày 01/10/2018

Khi class B kế thừa class A thì trong B đã có property FAQType rồi. Tại sao bạn lại khai báo 1 property FAQType khác override nó? Đó là lí do bạn không xài được getter, setter của A.Cứ để

public class B: A
{
}

là được rồi. Vì trong A property này là Key thì đâu cần phải add attribute Required

Tân Đặng viết 12:05 ngày 01/10/2018

Cảm ơn bạn đã trả lời, property Id mới là key nhen bạn, cái code trên là ví dụ á bạn, mình có thể thêm nhiều annotation hơn.
Mục đích của mình là chia mấy cái annotation về validate riêng ra 1 class nên mình mới override property, nhưng mình lại muốn nó không override getter, setter.
Bạn có cách nào không ?

Tao Không Ngu. viết 12:12 ngày 01/10/2018

Hi Đặng Duy Tân.
"Không muốn override getter, setter từ superclass " Ý bạn là dùng get set của lớp cha ?

Tân Đặng viết 12:20 ngày 01/10/2018

Đúng rồi bạn @Phong_Ky_Vo , nhưng mình vẫn muốn override property

Văn Dương viết 12:20 ngày 01/10/2018

Thì bỏ cái virtual ở lớp cha đi thì lớp con có property của lớp cha làm property của nó.
Muốn override thì dung new.

public class Cha{
    public int Property{get;set;}
}

public class Con:Cha{
    // override Property
    public new int Property{
        get{return base.Property;}
        set{base.Property=value;}
    }
}
Tân Đặng viết 12:14 ngày 01/10/2018

Ok, cảm ơn bạn @Duong_Act, mình có đọc new này rồi mà không thử, đúng là bị lú mà

Bài liên quan
0