2010-07-01 33 views
5

làm thế nào để thực hiện các lớp bên ngoài bên trong C#lớp Inner và lớp Outer trong C#

tôi có hai lớp lồng nhau

như

class Outer 
{ 
    int TestVariable = 0; 
    class Inner 
    { 
     int InnerTestVariable = TestVariable // Need to access the variable "TestVariable" here 
    } 
} 

lỗi hiển thị của nó khi biên dịch.

Nó có thể được giải quyết bằng cách

1) Làm TestVariable như tĩnh

2) Đi qua một thể hiện của lớp Outer đến lớp Inner

nhưng trong java không có nhu cầu để tạo Instance hoặc tĩnh.

tôi có thể sử dụng cùng chức năng trong C# không?

+0

có thể trùng lặp của [Cách tốt nhất để truy cập điều khiển trong lớp bao quanh từ lớp lồng nhau là gì?] (Http://stackoverflow.com/questions/185124/whats-the-best-way-of-accessing- control-in-the-enclosing-class-from-the-nes) – nawfal

Trả lời

11

Không, C# không có ngữ nghĩa giống như Java trong trường hợp này. Bạn có thể tạo TestVariableconst, static hoặc chuyển một phiên bản Outer tới hàm tạo của Inner như bạn đã lưu ý.

0

Hãy biến internal hoặc vượt qua của nội constructor

+0

Nếu tôi khai báo biến là internal, nó không thể truy cập bên trong lớp bên trong –

3

Bạn có thể tạo một thể hiện của lớp bên trong mà không hề có cá thể của lớp bên ngoài, những gì nên xảy ra trong trường hợp đó bạn nghĩ? Đó là lý do tại sao bạn không thể sử dụng nó

Outer.Inner iner = new Outer.Inner(); // what will be InnerTestVariable value in this case? There is no instance of Outer class, and TestVariable can exist only in instance of Outer 

Đây là một trong những cách để làm điều đó

class Outer 
    { 
     internal int TestVariable=0; 
     internal class Inner 
     { 
      public Inner(int testVariable) 
      { 
       InnerTestVariable = testVariable; 
      } 
      int InnerTestVariable; //Need to access the variabe "TestVariable" here 
     } 
     internal Inner CreateInner() 
     { 
      return new Inner(TestVariable); 
     } 
    } 
0

Câu trả lời ngắn: Không,

bằng cách nào đó Bạn sẽ cần phải tiêm TestVariable vào của bạn Lớp bên trong. Làm cho testVariable của bạn có khả năng dẫn đến hành vi không mong muốn. Sugestion của tôi sẽ được tiêm nó thông qua các nhà xây dựng.

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