标题:请教有关this关键字的知识
只看楼主
philmei
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2007-11-20
 问题点数:0 回复次数:7 
请教有关this关键字的知识
在C#中this的用法有好几种。
我的C#书中是如下这样说的,但我没太懂,哪位帮我解释一下,可以吗?谢谢。

this引用的第二种用法是把当前对象作为参数传给另一个方法,如下例:
class myClass
{
   public void Foo(OtherClass otherObject)
   {
      otherObject.Bar(this);
   }
}
让我们对这个例子做一些解释。我们有一个名为myClass.Foo的方法。在方法主体中,调用otherClass实例的Bar方法,传入对myClass当前实例的引用。这样Bar方法就可以使用myClass当前实例的公开方法和成员了。


这就这些,可以帮我解释一下吗,最好举个小例子。
搜索更多相关主题的帖子: myClass 关键 知识 Bar Foo 
2007-11-22 22:44
yms123
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:209
帖 子:12488
专家分:19042
注 册:2004-7-17
得分:0 
this就相当于当前对象的指针,也就是说在对象内部由系统指定了this=myClass;
用this直接代替当前类的一个对象。
2007-11-22 23:19
philmei
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2007-11-20
得分:0 
谢谢回复!
otherObject指的是调用myClass.Foo的其它类的对象吗?
"Bar方法就可以使用myClass当前实例的公开方法和成员了" 这句话是什么意思呢?

扫地恐伤蝼蚁命,爱惜飞蛾纱罩灯
2007-11-22 23:46
yms123
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:209
帖 子:12488
专家分:19042
注 册:2004-7-17
得分:0 
otherObject.Bar(this);如果这个方法需要的参数是Object类型那就可以传入任何对象
this这里是一个当前类的对象,所以调用对象只能调用公开的方法和成员,
也就是使用public前缀的。
不过特殊的一点是如果在类内部使用this是可以调用private成员的比如
class myClass
{
   private string tstr="abc";
   public void Foo(myClassA ClsA)
   {
        ClsA.Bar(this);
   }
   public string ShowString()
   {
        return this.tstr;//这里this调用没有错误
   }
}
class myClassA
{
    private string tStr="";
    public void Bar(Object Obj)
    {
          this.tStr=Obj.tstr;//传到类外部就会出错误
    }
}
其实楼主只要记住在类内部,this不受任何public private 访问修饰的限制,但在外部this变成对象时就要受到限制,这是因为面向对象中的封装性。
2007-11-23 00:10
philmei
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2007-11-20
得分:0 
虽然还是不太明白,但我不好意思再问了,真的非常谢谢您!
我先往后学,再多积累点语法,然后我再回来领悟您的讲解。
现在您的举列我还不能完全看懂,呵呵

扫地恐伤蝼蚁命,爱惜飞蛾纱罩灯
2007-11-23 00:45
guoxhvip
Rank: 8Rank: 8
来 自:聖西羅南看臺
等 级:贵宾
威 望:44
帖 子:4052
专家分:135
注 册:2006-10-8
得分:0 
说通俗一点 this就是本类当前的对象
比如说下面这个例子
class Program
{
        public void display()
        {
            Console.WriteLine("Hello World");
        }

        public void show()
        {
            this.display();
        }
        static void Main(string[] args)
        {
            Program p = new Program();
            p.show();
        }
}
通常我们调用类的方法需要创建该类对象(Program p = new Program())
然后用"对象.方法"(p.show())来调用,但是show方法里面用this又调用了它的display方法,同样输出了"Hello World",其实这个程序并不能很好体现this的用途,不过有些时候比如说现在有个WinForms程序,你要在Form1的某个事件中弹出Form2,并在Form2中能操作当前Form1中public的方法,这时你再new Form1把它传递到Form2就不行了,往往这个时候就可以用this代替

愛生活 && 愛編程
2007-11-23 03:02
philmei
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2007-11-20
得分:0 
谢谢,谢谢。
this的这个用法我是知道的,书中说了这个用法,我看懂了的。书中提到了关于this的其它用法,其中说的,当this作为参数传给另一个方法我没看懂,呵呵
非常感谢您的帮助,您的例子很清楚,再次谢谢您了。

扫地恐伤蝼蚁命,爱惜飞蛾纱罩灯
2007-11-24 13:22
guoxhvip
Rank: 8Rank: 8
来 自:聖西羅南看臺
等 级:贵宾
威 望:44
帖 子:4052
专家分:135
注 册:2006-10-8
得分:0 
当this作为参数传给另一个方法这个问题其实就是上面我说的你要在Form1的某个事件中弹出Form2,并在Form2中能操作当前Form1中public的方法就需要 具体做法
Form1中:
Form2 f2 = new Form2(this);
f2.Show();
Form2 中:
定义成员变量Form1 f1 = null;
构造方法public Form2(Form1 f1) {this.f1 = f1}
这时你的f1就可以调用Form1中public的方法或者属性了

愛生活 && 愛編程
2007-11-24 21:48



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-187840-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.098204 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved