기본 클래스에서 파생 클래스 특성을 사용하는 방법은 무엇입니까? 씨#

Denis

이 두 가지 클래스가 있습니다.

abstract class BaseModel
{
  ...
  public List<String> fields;
  ...
  public DataSet select(){
    //ex : this here the fields is null; but this class being abstract means
    // I can only call this from an inherited class of this (child class)
    // which will have the fields attributes override
    this.fields.Count();
  }
}

public class User : BaseModel
{
  public new List<String> fields = new List<String> {
    "id",
    "email",
    "name",
    "password"
  };
}

의 새 인스턴스를 User만든 다음 select메서드 를 호출하면 null오류가 발생합니다. 필드 속성을 잘못된 방식으로 덮어 쓰고 있습니까?

오류
public class User : BaseModel
{
  public new List<String> fields = ...
}

당신은 당신이 new원하는 것과 정확히 반대되는를 사용 하고 있습니다. new이 필드가 기본 클래스의 비슷한 이름이 지정된 필드와 관련 이 없음을 선언합니다 .

여기에서 사용할 수있는 몇 가지 접근 방식이 있습니다. 개인적 선호도 순으로 :

필드를 다시 선언하지 말고 대신 생성자를 사용하십시오.

public abstract class BaseModel
{
    public List<String> fields = new List<string>();
}

public class User : BaseModel
{
    public User()
    {
        fields.AddRange(new List<String> {
            "id",
            "email",
            "name",
            "password"
        });
    }
}

기본 생성자를 사용할 수도 있습니다. 여기에서 필요하지 않을 수도 있지만 때로는 더 깨끗한 접근 방식입니다. 여기서 좋은 점은 기본 클래스가 파생 클래스가 필드 목록을 전달 하도록 강제수 있으므로 개발자가 버그를 잊어 버리고 도입하는 것을 방지 할 수 있다는 것입니다.

public abstract class BaseModel
{
    public List<String> fields;

    public BaseModel(List<String> fieldsList)
    {
        this.fields = fieldsList;
    }
}

public class User : BaseModel
{
    public User() : base(new List<String> { "id", "email", "name", "password" })
    {

    }
}

기본 속성 (필드 아님!)을 virtual(또는 abstract)로 설정하고 파생 클래스에서 재정의합니다.

public abstract class BaseModel
{
    public virtual List<String> fields { get; set; } = new List<string>();
}

public class User : BaseModel
{
    public override List<String> fields { get; set; } = new List<String> { "id", "email", "name", "password" };
}

abstract 여기서도 일했을 것입니다.

여기에서 속성 대신 메서드를 사용할 수도 있습니다. 속성을 재정의 할 수는 없지만 일반적으로 메서드를 사용하여 수행됩니다.

public abstract class BaseModel
{
    public virtual List<String> GetFields()
    {
        return new List<String>();
    }
}

public class User : BaseModel
{
    public override List<String> GetFields()
    {
        return new List<String> {
            "id",
            "email",
            "name",
            "password"
        };
    }
}

abstract 여기서도 일했을 것입니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

기본 클래스에서 파생 속성을 사용하는 방법은 무엇입니까?

분류에서Dev

파생 클래스에서 기본 클래스 속성 만 가져 오는 방법은 무엇입니까?

분류에서Dev

다형성을 사용하여 기본 클래스에서 파생 된 클래스 벡터 멤버에 액세스하는 방법은 무엇입니까?

분류에서Dev

기본 클래스에서 생성 된 클래스에 @property를 만드는 방법은 무엇입니까?

분류에서Dev

파생 클래스에서 기본 클래스 생성자의 특수화를 구현하는 다른 방법은 무엇입니까?

분류에서Dev

기본 클래스에서 파생 클래스 멤버를 사용해야하는 클래스를 디자인하는 방법은 무엇입니까?

분류에서Dev

기본 클래스에서 파생 클래스 함수를 호출하는 방법은 무엇입니까?

분류에서Dev

C #의 기본 클래스에서 제네릭 사용 : 기본 클래스의 메서드가 파생 클래스의 형식을 반환하는지 확인하는 방법은 무엇입니까?

분류에서Dev

C # 기본 클래스 내의 파생 클래스에서 특정 형식의 모든 필드를 가져 오는 방법은 무엇입니까?

분류에서Dev

gdb를 사용하여 기본 클래스 생성자를 중단하는 방법은 무엇입니까?

분류에서Dev

파생 클래스를 새 속성으로 기본으로 캐스팅하는 방법은 무엇입니까?

분류에서Dev

인터페이스를 구현하는 기본 클래스에서 파생 된 인스턴스 목록을 만드는 방법은 무엇입니까?

분류에서Dev

파생 클래스 내에서 기본 클래스의 인스턴스 변수에 액세스하는 더 좋은 방법은 무엇입니까?

분류에서Dev

다른 파생 클래스의 조합에서 기능을 추가하는 방법은 무엇입니까?

분류에서Dev

기본 및 파생 클래스에서 작동하는 동안 파생 형식을 반환하는 방법은 무엇입니까?

분류에서Dev

기본 클래스의 함수에서 파생 클래스의 유형을 얻는 방법이 있습니까?

분류에서Dev

클래스없는 PHP 파일에서 PHPUnit 스켈레톤 생성기를 사용하는 방법은 무엇입니까?

분류에서Dev

기본 클래스에서 반 변성 매개 변수를 사용하는 방법은 무엇입니까?

분류에서Dev

CsvHelper를 사용하여 DynamicObject에서 파생 된 클래스를 작성하는 방법은 무엇입니까?

분류에서Dev

기본 클래스에서 파생 할당 연산자를 호출하는 방법은 무엇입니까?

분류에서Dev

이 예제에서 Clang을 사용하여 기본 클래스를 얻는 방법은 무엇입니까?

분류에서Dev

C ++에서 생성자 (생성자 만)를 사용하여 클래스에서 큰 전용 배열을 초기화하는 방법은 무엇입니까?

분류에서Dev

파생 클래스에서 기본 클래스의 오버로드 된 연산자에 액세스하는 방법은 무엇입니까?

분류에서Dev

파이썬에서 클래스 메서드의 반환 값에서 클래스 속성을 초기화하는 방법은 무엇입니까?

분류에서Dev

파생 클래스에서 기본 클래스 staic 인라인 데이터 멤버를 초기화하는 방법은 무엇입니까?

분류에서Dev

기본 클래스에서 파생 클래스 필드를 일반적으로 초기화하는 강력한 방법은 무엇입니까?

분류에서Dev

파생 클래스에서 JavaScript 기본 클래스 인스턴스를 생성하는 방법

분류에서Dev

C ++ 여러 파생 클래스에서 기본 클래스 메서드를 호출하는 방법은 무엇입니까?

분류에서Dev

같은 클래스의 다른 생성자에 기본 생성자 데이터를 사용하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    기본 클래스에서 파생 속성을 사용하는 방법은 무엇입니까?

  2. 2

    파생 클래스에서 기본 클래스 속성 만 가져 오는 방법은 무엇입니까?

  3. 3

    다형성을 사용하여 기본 클래스에서 파생 된 클래스 벡터 멤버에 액세스하는 방법은 무엇입니까?

  4. 4

    기본 클래스에서 생성 된 클래스에 @property를 만드는 방법은 무엇입니까?

  5. 5

    파생 클래스에서 기본 클래스 생성자의 특수화를 구현하는 다른 방법은 무엇입니까?

  6. 6

    기본 클래스에서 파생 클래스 멤버를 사용해야하는 클래스를 디자인하는 방법은 무엇입니까?

  7. 7

    기본 클래스에서 파생 클래스 함수를 호출하는 방법은 무엇입니까?

  8. 8

    C #의 기본 클래스에서 제네릭 사용 : 기본 클래스의 메서드가 파생 클래스의 형식을 반환하는지 확인하는 방법은 무엇입니까?

  9. 9

    C # 기본 클래스 내의 파생 클래스에서 특정 형식의 모든 필드를 가져 오는 방법은 무엇입니까?

  10. 10

    gdb를 사용하여 기본 클래스 생성자를 중단하는 방법은 무엇입니까?

  11. 11

    파생 클래스를 새 속성으로 기본으로 캐스팅하는 방법은 무엇입니까?

  12. 12

    인터페이스를 구현하는 기본 클래스에서 파생 된 인스턴스 목록을 만드는 방법은 무엇입니까?

  13. 13

    파생 클래스 내에서 기본 클래스의 인스턴스 변수에 액세스하는 더 좋은 방법은 무엇입니까?

  14. 14

    다른 파생 클래스의 조합에서 기능을 추가하는 방법은 무엇입니까?

  15. 15

    기본 및 파생 클래스에서 작동하는 동안 파생 형식을 반환하는 방법은 무엇입니까?

  16. 16

    기본 클래스의 함수에서 파생 클래스의 유형을 얻는 방법이 있습니까?

  17. 17

    클래스없는 PHP 파일에서 PHPUnit 스켈레톤 생성기를 사용하는 방법은 무엇입니까?

  18. 18

    기본 클래스에서 반 변성 매개 변수를 사용하는 방법은 무엇입니까?

  19. 19

    CsvHelper를 사용하여 DynamicObject에서 파생 된 클래스를 작성하는 방법은 무엇입니까?

  20. 20

    기본 클래스에서 파생 할당 연산자를 호출하는 방법은 무엇입니까?

  21. 21

    이 예제에서 Clang을 사용하여 기본 클래스를 얻는 방법은 무엇입니까?

  22. 22

    C ++에서 생성자 (생성자 만)를 사용하여 클래스에서 큰 전용 배열을 초기화하는 방법은 무엇입니까?

  23. 23

    파생 클래스에서 기본 클래스의 오버로드 된 연산자에 액세스하는 방법은 무엇입니까?

  24. 24

    파이썬에서 클래스 메서드의 반환 값에서 클래스 속성을 초기화하는 방법은 무엇입니까?

  25. 25

    파생 클래스에서 기본 클래스 staic 인라인 데이터 멤버를 초기화하는 방법은 무엇입니까?

  26. 26

    기본 클래스에서 파생 클래스 필드를 일반적으로 초기화하는 강력한 방법은 무엇입니까?

  27. 27

    파생 클래스에서 JavaScript 기본 클래스 인스턴스를 생성하는 방법

  28. 28

    C ++ 여러 파생 클래스에서 기본 클래스 메서드를 호출하는 방법은 무엇입니까?

  29. 29

    같은 클래스의 다른 생성자에 기본 생성자 데이터를 사용하는 방법은 무엇입니까?

뜨겁다태그

보관