当前位置: 首页 > 编程语言 > C#

为什么关键字'this'不能用于静态方法?分享

时间:2023-04-11 01:44:24 C#

为什么关键字'this'不能用于静态方法?为什么不能在静态方法中使用关键字?我想知道为什么C#定义了这个约束。这种约束有什么好处?[更新]:实际上,这是我在采访中提出的一个问题。我知道“static”和“this”的用法,根据您的所有回复,我想我知道为什么不能将两者一起使用。也就是说,静态方法用于改变状态或在类型级别做某事,但是当你需要使用“this”来表示你想改变状态或在实例级别做某事时。为了区分类型的状态变化和实例的状态变化,c#不允许在静态方法中使用“this”。我对吗?因为this指向类的一个实例,所以静态方法中没有实例。this关键字引用类的当前实例。静态成员函数没有this指针您会注意到静态成员的定义使用static修饰符来声明属于类型本身而不属于特定对象的静态成员,这就是为什么没有什么可说的。这是当前对象的实例。对于静态方法,没有当前对象,因此,this不存在。这不是约束,但该方法的重点是静态的。this指的是类的当前实例,所以它只能用在实例方法中。静态方法在没有实例的类级别上工作。因此,没有这个。this指的是对象的当前实例。静态方法是类的方法。它不是实例方法,因此在静态方法中使用它没有意义。我很确定这不仅限于C#,也不是约束,这是一种合乎逻辑的情况。正如@Yuriy正确指出的那样,这指的是一个类的当前实例,即您已经使用new(或DI)来实例化该类(创建了一个实例)并且您需要以某种方式在内部引用该实例,即对象。在不实例化类的情况下调用静态方法实际上并不会创建对象,因此您不能将this作为属性访问。关键字this指的是对象的实例。在静态上下文中,没有具体的实例可以引用。使用静态方法,您可以编写:MyClass.static_method();这与任何对象实例无关(因此您不需要此关键字)。因为static_method()工作并且不需要对象实例来完成它的工作。static_method()不知道你有哪个对象实例,但它可以改变所有对象实例的行为:MyClassa=newMyClass();MyClassb=newMyClass();MyClass.static_method("打印机");a.显示();//打印一些东西b.display();//打印一些东西MyClass.static_method("MONITOR");a.显示();//在显示器上显示一些东西b.display();//displaysomethingonmonitorin在这种情况下,static_method()更改了MyClass的所有对象实例中display()方法的行为。this用于引用变量或方法的父对象。通过在方法上声明静态,可以在不实例化该类的对象的情况下调用该方法。因此,不允许使用this关键字,因为静态方法不与任何对象相关联。“this”指的是一个类的实例。静态初始化不实例化,因此静态方法不能引用未创建的“实例”。简短的回答是:这是指静态范围内不存在的类的实例。然而,在深入研究任何面向对象的编程语言之前,找一本好书/课程并尝试理解基本的面向对象概念。我不确定这是否有助于解决您的问题,但我相信这两个代码片段是等效的:MyStaticClass.foo();简单的foo();将在MyStaticClass类中调用foo()方法,假设您从MyStaticClass调用foo().你可以调用Math.abs(x);获取x的绝对值,而实例化一个Math对象并没有真正的意义,这就是为什么Math是一个静态类。另一个更直白的问题:'this'关键字不能用在静态方法中,以避免与它在实例方法中的用法混淆,在实例方法中它用于访问作为方法的隐藏参数自动传递的实例指针(引用)符号。如果没有,您可以在静态方法中定义一个名为“this”的局部变量,但这与引用实例的实例方法中的“this”关键字无关。下面是两种等效方法的示例,一种是静态方法,一种是实例方法。两个方法调用都将一个参数传递给方法,该方法执行执行相同操作的代码(在控制台上打印对象的字符串表示形式)并返回。公共类Someclass{voidSomeInstanceMethod(){System.Console.WriteLine(this.ToString());}voidstaticSomeStaticMethod(Someclass_this){System.Console.WriteLine(_this.ToString());}publicvoidstaticMain(){Someclassinstance=newSomeclass();instance.SomeInstanceMethod();一些静态方法(实例);this关键字可用于标记为静态的方法。此语法用于在C#中定义扩展方法。这从2007年发布的C#3.0(Wikipedia)开始可用。在正常使用中,this指的是实例,而static表示没有实例(所以没有this)。事实上,你不能一起使用它们(除了像扩展方法这样的特殊例外),并且从概念上理解this和static是很自然的。以上是C#学习教程:为什么关键字'this'不能用于静态方法?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: