2010-06-02 44 views
10

Tôi có ba lớp như thế này.Tôi có thể truy cập các đối tượng lớp ngoài trong lớp bên trong

class A 
{ 
    public class innerB 
     { 
     //Do something 
     } 

    public class innerC 
     { 
     //trying to access objB here directly or indirectly over here. 
     //I dont have to create an object of innerB, but to access the object created by A 
     //i.e. 
      innerB objInnerB = objB; 
     //not like this 
      innerB objInnerB= new innerB(); 
     } 

private innerB objB{get;set;} **//Private** 

public A() 
    { 
    objB= new innerB(); 
    } 
} 

tôi muốn truy cập các đối tượng của lớp B trong Class C mà được tạo ra bởi lớp A. Có thể bằng cách nào đó để thực hiện thay đổi trên đối tượng của lớp A trong lớp C. Tôi có thể lấy đối tượng Class A bằng tạo sự kiện hoặc dù sao đi nữa.

Chỉnh sửa: Lỗi của tôi khi đặt câu hỏi ở trên. Đối tượng của B tạo ra trong A là tin không được công khai

là nó có thể làm điều này bằng cách tạo ra EVENT

Nếu dù sao đi nữa tôi trở thành có thể nâng cao một sự kiện có thể được xử lý bởi Class A, sau đó vấn đề của tôi có thể giải quyết.

+3

Vì bạn đã viết hầu hết các mã ở đó ... tại sao không chỉ đổ nó vào Visual Studio và thử nó cho chính mình? –

+0

@Justin: Thx để được giúp đỡ ur, tôi đã cố gắng để làm điều này trong VS. Tôi chỉ tóm tắt 100 dòng mã của tôi trong những gì tôi thực sự muốn ở tình hình hiện tại. Xin vui lòng đề nghị nếu u nhận được bất kỳ giải pháp. Tôi cần phải truy cập vào đối tượng của A trong sự kiện của tôi đang được nâng lên bởi một số lớp khác và đang bị bắt tại innerC –

Trả lời

15

Nếu tôi đọc chính xác bạn muốn truy cập thuộc tính objB của lớp A bên trong innerC WITHOUT không chuyển nó cùng.

Đây không phải là cách C# lớp bên trong làm việc, như mô tả trong bài viết này: C# nested classes are like C++ nested classes, not Java inner classes

Nếu bạn muốn truy cập A.objB từ innerC sau đó bạn sẽ phải bằng cách nào đó vượt qua lớp A đến innerC.

+12

Bạn cần chuyển vào phụ huynh (vì không có từ khóa 'bên ngoài'), nhưng lớp bên trong ** có thể ** truy cập các thành viên riêng tư của cha mẹ. – dbkk

+0

Cảm ơn bạn đã downvote. Ngoài ra, bạn đã sai. –

+2

Yêu cầu trình biên dịch C#: [mẫu mã] (http://pastebin.com/HwA6F2Ee). – dbkk

-1

Vì lớp B của bạn nằm trong cùng phạm vi với lớp C, nghĩa là, trong lớp A, bạn sẽ có thể khởi tạo kiểu lồng nhau B từ kiểu lồng nhau C và sử dụng nó.

+0

Tôi không nghĩ đó là điều anh ấy đang tìm kiếm - nếu tôi đọc anh ấy đúng, anh ấy muốn truy cập tài sản objB của lớp A bên trong innerC KHÔNG đi qua nó. –

7

Bạn cần phải vượt qua một tài liệu tham khảo của OuterClass để InnerClass, có lẽ trong các nhà xây dựng, như:

public class OuterClass 
{ 
    //OuterClass methods 

    public class InnerClass 
    { 
     private OuterClass _outer; 

     public InnerClass(OuterClass outer) 
     { 
      _outer = outer; 
     } 
    } 
} 

Sau đó, bạn có thể sử dụng tài liệu tham khảo trong tất cả các InnerClass phương pháp của bạn.

+0

Tôi đang cố gắng làm điều này tại một sự kiện được nâng lên bởi một số điều khiển người dùng có xử lý đã được định nghĩa trong lớp B có bộ sưu tập các đối tượng của Class C. –

+0

Đối số sự kiện của bạn có thể tham chiếu đến đối tượng bạn cần không? – dlras2

+0

Tôi không nghĩ như vậy, vì sự kiện đó đang được nâng lên bởi một điều khiển người dùng mà một lần nữa bị ràng buộc bởi Bộ sưu tập đang được giữ bởi lớp B chứa bộ sưu tập của lớp C. Tôi biết điều này là hơi khó hiểu tại thời điểm này. –

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