Tôi cho rằng nếu bạn sử dụng this.
để củng cố mà bạn đang đề cập đến các thành viên dụ, tương đương với một thành viên tĩnh sẽ được sử dụng ClassName.
Nhưng phong cách nghệ thuật, tại sao thêm mã mà không làm thay đổi nghĩa?
chỉnh sửa thêm làm rõ khác nhau:
câu cuối cùng của tôi ở trên có thể được minh họa bằng những ví dụ:
class Example1
{
public int J { get; set; }
public Example1()
{
J = 0;
}
// These two methods have *exactly* the same CIL
public int InstanceMethodLong()
{
return this.J;
}
public int InstanceMethodShort()
{
return J;
}
}
Các this.
trong InstanceMethodLong
không thay đổi ý nghĩa so với InstanceMethodShort
.
Tĩnh:
class Example2
{
public static int K { get; set; }
static Example2()
{
K = 0;
}
// These two methods have *exactly* the same CIL
public int StaticMethodLong()
{
return Example2.K;
}
public int StaticMethodShort()
{
return K;
}
Các Example2.
trong StaticMethodLong
không thay đổi ý nghĩa so với StaticMethodShort
.
Trong cả hai trường hợp này, việc thêm vòng loại kết quả trong cùng một CIL, cùng một hành vi và có nhiều nguồn hơn để viết, đọc và hiểu. Stylistically - và tôi sẽ vui vẻ chấp nhận rằng đây là một câu hỏi về phong cách mã - Tôi thấy không có lý do gì để nó ở đó.
Với tiền tố gạch tình hình là hơi khác nhau:
class Example3
{
int _j;
public int J
{
get { return _j; }
set
{
_j = value;
// and do something else,
// to justify not using an auto-property
}
}
public Example3()
{
J = 0;
}
public int MethodWithParameter(int j)
{
// Now there is a *difference* between
return j;
// and
return _j;
}
}
Ở đây, trong MethodWithParameter
, có một sự khác biệt giữa đề cập đến _j
và j
- vì vậy chúng tôi đang cố tình và rõ ràng thể hiện ý nghĩa khác nhau . Đúng là trình biên dịch không quan tâm chúng tôi gọi tên biến của chúng tôi là gì, nhưng nó không quan tâm đến những biến mà chúng tôi đang đề cập đến! Vì vậy, trong phần thân của MethodWithParameter
, việc sử dụng hoặc không sử dụng dấu gạch dưới không phải là chỉ mang tính phong cách, đó là ngữ nghĩa. Đó không phải là vấn đề cụ thể mà chúng tôi đang giải quyết trong câu hỏi này.
Cảm ơn tất cả vì câu trả lời của bạn. Tôi đánh giá cao câu trả lời đơn giản cho câu hỏi này là 'không', nhưng quan điểm của tôi là tìm hiểu xem có cách nào phân biệt giữa thành viên tĩnh thuộc lớp bạn không đang làm việc trong hoặc một thành viên của lớp khác. Kết luận của tôi là, về mặt phong cách, tốt nhất nên sử dụng tên lớp khi làm việc trong một lớp khác (điều kiện tiên quyết) và không có tên lớp khi trong lớp đó. Tôi sẽ trao giải đáp cho @AakashM cho lời giải thích nhanh chóng và đầy đủ (hoặc hết sức). :-) –