2010-07-30 38 views
11

Chỉ cần tự hỏi liệu các biến cấp lớp riêng có được kế thừa không? Trong C#Các biến cấp lớp riêng có được kế thừa không?

+0

Bằng ngôn ngữ nào? –

+1

trong C# xin lỗi về điều đó –

+0

có thể trùng lặp của [Các thành viên tư nhân được kế thừa trong C#?] (Http://stackoverflow.com/questions/2950820/are-private-members-inherited-in-c) –

Trả lời

14

Có, nhưng chúng không thể truy cập được, do đó, nhìn vào nó, bạn có thể thành thật nói rằng chúng không được kế thừa. Nhưng có họ thực sự là

4

Tùy thuộc vào ngôn ngữ, nhưng nói chung, không - chúng chỉ có thể truy cập được trong lớp mà chúng được xác định.

+0

Nhưng chúng thường là một phần của cá thể (ngay cả khi ngôn ngữ ngăn truy cập). –

11

Chúng được kế thừa, nhưng từ khóa "riêng tư" có nghĩa là chỉ có lớp mà chúng được khai báo mới có thể truy cập chúng. Điều này loại trừ các lớp con. Tuy nhiên, vì một thể hiện của một phân lớp chứa siêu lớp của chính nó, chúng vẫn còn đó. Bạn chỉ không thể nhìn thấy chúng trực tiếp.

Nếu đang tìm trường chỉ có lớp khai báo và lớp con có thể thấy, bạn có thể sử dụng từ khóa "được bảo vệ" thay vì "riêng tư" và phải cung cấp chức năng bạn đang tìm kiếm.

3

Chúng là, mặc dù chúng không thể truy cập trực tiếp.

public class BaseClass 
{ 
    private const int _aNumber = 5; 
    public int ReturnANumber() { return _aNumber; } 
} 

public class DClass : BaseClass 
{ 
    public void SomeMethod() 
    { 
     // This is indirectly accessing a private implemented in the class 
     // this derives from, but existing inside this class. 
     int numbery = this.ReturnANumber(); 
    } 
} 

public class Whatever 
{ 
    public void AMethod(DClass someDClass) 
    { 
     int thisIsNumberFive = someDClass.ReturnANumber(); 
    } 
} 
7

Chúng được kế thừa theo một nghĩa nào đó. Không gian bộ nhớ được cấp phát cho chúng và chúng "tồn tại" trong cá thể lớp con. Tuy nhiên, lớp con không thể truy cập biến đó. (Nếu bạn muốn phân lớp truy cập biến lớp cơ sở, hãy sử dụng protected thay vì private.)

Đây là phương thức trong lớp cơ sở cần có thể đặt biến riêng (hoặc không sử dụng được) cho nó). Những phương thức này cũng có sẵn trên một cá thể của lớp con - và trên thực tế, cá thể lớp con sẽ có thể được coi là một cá thể của lớp cơ sở (bắt buộc để đáp ứng các Liskov substitution principle). Nếu các biến riêng không được kế thừa, hành vi của các phương thức lớp cơ sở sẽ thay đổi hoặc phá vỡ.

3

Có, chúng được kế thừa nhưng trình biên dịch cấm truy cập chúng. Aalas, bạn vẫn có thể nhận được chúng -không được đề nghị thông qua sự phản ánh hoặc thông qua thủ thuật AMethod() đẹp mắt của bạn.

3

Chúng được kế thừa nhưng không thể truy cập được hoặc chỉ có thể truy cập được trong lớp nơi chúng được khai báo. Bạn có thể truy cập chúng ở lớp tiểu bằng hai cách

  1. tuyên bố họ được bảo vệ chứ không phải sau đó tin
  2. viết một phương pháp nào đó trả về giá trị của rằng biến tin

    nhưng không có cách nào mà bạn trực tiếp truy cập biến riêng trong phân lớp.

Các vấn đề liên quan