Câu hỏi phỏng vấn C#
Câu hỏi

Phạm vi của biến thành viên Internal của một lớp C# là gì?

Câu trả lời

Trong C#, phạm vi của biến thành viên được đánh dấu với từ khóa internal là toàn bộ assembly mà nó được định nghĩa. Nghĩa là, một biến thành viên internal có thể được truy cập từ bất kỳ lớp nào trong cùng một assembly, nhưng không thể truy cập từ các lớp nằm ngoài assembly đó.

Đặc điểm của từ khóa internal:

  • Truy cập trong Assembly: Biến thành viên internal có thể được truy cập từ bất kỳ lớp hoặc phương thức nào trong cùng một assembly.
  • Hạn chế truy cập ngoài Assembly: Không thể truy cập biến thành viên internal từ các lớp hoặc phương thức nằm trong một assembly khác.
  • Sử dụng: internal thường được sử dụng để ẩn các chi tiết triển khai cụ thể của một lớp hoặc một assembly khỏi người dùng của nó, giúp tạo ra một giao diện lập trình ứng dụng (API) rõ ràng và dễ sử dụng.

Ví dụ:

csharp Copy
// Trong Assembly1.dll
public class MyClass
{
    internal int myInternalField = 0;
}

// Trong cùng Assembly1.dll
public class AnotherClass
{
    void MyMethod()
    {
        MyClass myClass = new MyClass();
        // Truy cập thành công vì myInternalField là internal và cùng một assembly
        int value = myClass.myInternalField;
    }
}

// Trong Assembly2.dll
public class ExternalClass
{
    void MyMethod()
    {
        MyClass myClass = new MyClass();
        // Dòng sau sẽ gây ra lỗi biên dịch vì myInternalField không thể truy cập từ một assembly khác
        int value = myClass.myInternalField;
    }
}

Trong ví dụ trên, myInternalField có thể được truy cập từ AnotherClass vì cả hai đều nằm trong cùng một assembly (Assembly1.dll). Tuy nhiên, ExternalClass trong Assembly2.dll không thể truy cập myInternalField do hạn chế của từ khóa internal.

Tóm lại, từ khóa internal trong C# cung cấp một cách để giới hạn phạm vi truy cập của biến thành viên, cho phép chúng chỉ được truy cập từ bên trong assembly mà chúng được định nghĩa.

middle

middle

Gợi ý câu hỏi phỏng vấn

middle

Sự khác nhau giữa == và phương thức Equals trong C# là gì?

senior

Giải thích quá trình biên dịch code trong C#?

middle

So sánh sự khác nhau giữa các lớp TraceDebug trong C# là gì?

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào