Bạn có thể tùy chọn sử dụng this
trong việc tiếp cận thành viên dụ từ bên trong một thành viên dụ như một phương pháp dụ hoặc tài sản vì bất cứ khi nào một phương pháp dụ được gọi là this
(đề cập đến đối tượng hiện hành) được tự động thông qua tại như một tham số vô hình.
Bạn không thể sử dụng this
từ bên trong các thành viên tĩnh để truy cập thành viên dụ ... như bạn không thể sử dụng this.x
hoặc this.y
(hoặc thậm chí x đơn giản và y) từ bên trong một phương pháp tĩnh hoặc tài sản nếu x và y là các thành viên dụ. Điều này là do this
không được xác định trong cuộc gọi thành viên tĩnh. Các thành viên tĩnh thuộc về cả lớp ... nó không có ý tưởng mà dụ this
là đề cập đến. Và đó là do thực tế là khi bạn gọi một phương pháp tĩnh hoặc tài sản, cuộc gọi có định dạng ClassName.MethodName();
Vì vậy, phương pháp tĩnh không biết đối tượng this
sẽ tham chiếu.
this
cũng không phải là tùy chọn (nó phải được sử dụng) làm công cụ sửa đổi đầu tiên trong danh sách tham số của một phương pháp mở rộng. Trong thực tế, this
là những gì xác định một phương thức tĩnh như là một phương thức mở rộng. Tại đây, this
xác định tham số đầu tiên là trường hợp mà phương thức mở rộng đang hoạt động.
using System;
class Class_name
{
static string static_variable="static";
string instance_variable="instance";
static void Main()
{
Class_name object_name = new Class_name();
Console.WriteLine("Printing out instance and static variables from within Main() body :");
Console.WriteLine(object_name.instance_variable);
Console.WriteLine(Class_name.static_variable);
/* Note that we cannot say either of the following :
object_name.static_variable
Class_name.instance_variable
*/
Console.WriteLine();
// now lets call the static and instance methods
object_name.Instance_method(); // Now this is the key call which
// passes "this" as an invisible parameter
// to the Instance_method. "this" refers to
// object_name
Class_name.Static_method();// "this" is NOT passed to Static_method() because now
// the call is made on Class_name ... so there is nothing
// to be represented by "this"
Console.ReadLine();
}
void Instance_method()
{
// here we receive "this" as an invisible parameter referring
// to the object on which Instance_method is called (i.e. object_name)...
// ... see the Main() method for comments at the call site.
Console.Write("Instace method called ... " +
"prints out instance variable twice, with and without 'this': ");
// the following two calls mean exactly the same.
Console.Write(this.instance_variable);
Console.WriteLine (instance_variable);
// one little additional point is that static members are
// accessible from within instance members
Console.WriteLine();
Console.Write("static variables can also be accessed from within Instance_method: ");
Console.WriteLine(static_variable);
Console.WriteLine();
Console.WriteLine();
}
static void Static_method()
{
// See the Main() method body for the call Class_name.Static_method()
// Notice that this method is called on Class_name and not object_name
// which means that there is no invisibly passed-in "this" parameter available
// in this method.
// we can also not access the instance_variable in this method
// as instance variables are always part of some object. This method
// is not called on any object, its called on Class_name.
// Console.WriteLine(instance_variable); // Compiler error
Console.WriteLine("Static method called ... prints out static variable: ");
Console.WriteLine(static_variable);
}
}
Nếu trình biên dịch không phàn nàn Tôi nghĩ đó là sáu người một nửa tá của người kia. – R0MANARMY
Có, tùy chọn. Theo ý kiến của tôi, việc sử dụng quá mức "điều này" làm lộn xộn mã. –
bản sao có thể có của [C# Khi sử dụng "Từ khóa" này "(http://stackoverflow.com/questions/843288/c-when-to-use-this-keyword) –