c ++和c#中'this'指针的概念和数据类型

时间:2014-12-18 13:13:23

标签: c# c++ this

我对这个指针的概念有点不清楚。 我知道c ++中的this指针是隐藏指针,它用于引用当前的调用对象。但是我想知道这个指针是否有数据类型,例如。 int * p;说明p是指向整数的指针。同样这个指针指向什么? (我的意思是这个'这个'指针在哪里声明或写入,或者它存在于何处以及它是如何写在那里的。)

第二个问题是在C#的背景下 问题是 - 这是什么'这个'在C#的上下文中,如果它不是C#中的指针(当我尝试使用>这个'关键字的>箭头操作符时,我发现它不是C#中的指针)。 再一次,'这个'的数据类型是什么?在C#中(我知道上面关于c ++的问题的答案会回答它,但我想知道它在C#中有什么不同)

P.S:我是一名业余程序员,在学习阶段,对于使用像&#34这样的术语表示道歉;它是如何写在那里的?#34;在提出问题时,而不是适当的技术术语。

5 个答案:

答案 0 :(得分:8)

  

我想知道这个指针是否有数据类型

隐藏指针this的类型始终是使用指针的类的类型。例如,在

下面
struct Foo {
    void bar1() {
        cout << this << endl;
    }
    void bar2() const {
        cout << this << endl;
    }
};

this内的bar1()类型为Foo*;在bar2() const内,它是const Foo*

  

同样这个指针指向什么?

它是指向当前实例的指针。例如,在

下面
struct Foo {
    void bar() {
        cout << this << endl;
    }
} foo;

this内的指针bar()和表达式&foo指向同一个对象。

  

如果它不是指针,那么在C#的上下文中this是什么?

C#没有指针 * ,但它的对象引用概念相当类似。在C#中,this表示对当前对象的引用。 this的类型是引用它的类的类型。

请注意this指向的对象的运行时类型可能不同 - 例如,它可能是子类。但是,指针this的静态类型与引用指针this的类的类型相匹配。

* 除非你冒险进入不安全的环境,无论如何。

答案 1 :(得分:0)

在C ++中,this指针是一个传递给所有非静态成员函数的隐式参数(作为隐藏参数传递给它们)。请点击此处查看更多解释:http://www.tutorialspoint.com/cplusplus/cpp_this_pointer.htm和此处:http://www.geeksforgeeks.org/this-pointer-in-c/http://msdn.microsoft.com/en-us/library/y0dddwwd.aspx

在C#中,“this”是一个保留关键字,它是对运行该方法的对象的引用。正如您在C#中所知,您不使用指针,但您使用对象的引用。

答案 2 :(得分:0)

这里的恕我直言是一个有用的参考资料,可以很好地描述问题:MSDN

答案 3 :(得分:0)

是的,C ++中的this指针有一个类型。

class A
{
public:
  void func() {}
}

func内部this类型为: -

A * const          //for non-const functions.
A const * const    //for const functions.

答案 4 :(得分:0)

this肯定是C ++中的指针,在类Foo中它将属于Foo *类型,除非你在volatile或{ {1}}方法 - 在这种情况下,这两个修饰符将传播到const类型。

同样在C#this中,它只是当前对象类型的神奇参考变量。