A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 boy_AND_gou 于 2014-5-19 06:11 编辑

private char c=' ';public void show()
{
     Hello(ref c);
}
public void Hello(char c)
{
  c='a';
}


评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

6 个回复

倒序浏览
这个 问题 没必要纠结。
他这样做的目的 就是为了   显示 get 和 set 的好处。


还有如果你真要弄请 可以参考
1 如何访问私有成员  http://www.cnblogs.com/zhuqil/archive/2010/07/25/1784903.html
2 get、set 的好处   http://blog.csdn.net/deepwishly/article/details/5305017


【如果觉得能帮得上  请对问题 进行编辑  修改为 提问结束   麻烦了】
回复 使用道具 举报
你这个写的不规范,在一个类中,方法可以访问到私有字段的,这个可以参考成员的访问修饰符。
回复 使用道具 举报
你这肯定报错,Hello方法没写ref修饰符 ref代表引用传递 方法声明的时候要写,调用的时候也要写

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
private char c=' ';

public void show()
{
     Hello(ref c);
}
public void Hello( ref char c)
{
  c='a';
}
你的Hello方法参数也需要用ref修饰才可以,同类中的方法一定是可以访问私有变量的

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
当有人给你回复后,请把帖子编辑为提问结束,这样版主才给你加分。
回复 使用道具 举报
陈君 金牌黑马 2014-5-18 11:00:11
7#
这里就是ref的用法的问题。 这里可以看到你这样写的话已经报错了。
正确的程序应该是
  private char c=' ';
        public void show()
        {
            Hello(ref c);
        }
        public void Hello(ref char c)
        {
            c='a';
        }
为什什么Hello的方法的实体部分也要加ref呢?其实这里的ref就好像是c语言中的*。ref char c的意思就好像是C语言中的char * c代表的是参数的类型是指向向char类型的指针。而不是char类型。char类型保存的是具体的值,但是char *类型保存的是保存char类型的值饿内存中的地址。
我拿一个C语言的传址调用的例子来说明下
#include "stdio.h"
#include "malloc.h"
void swap(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
void main()
{
int x,y;
x=6;
y=10;
swap(&x,&y);
printf("x=%d,y=%d",x,y);
getchar();
}这里在调用swap的时候时用了&取地址。这样就能保证传进去的是内存的地址,而不是具体的值了。而且只有这样它才能swap要求的参数类型相匹配,这样就不会报错。
现在再来看看这个程序
private char c=' ';
public void show()
{
Hello(ref c);
}
public void Hello(ref char c)
{
c='a';
}只有调用的时候加上ref,并且方法的实体里参数类型也是ref char才能运行。
至于为什么加上ref。直接传值调用不行嘛?
我们来试下
    class Class1
    {
        private char c=' ';
        private int a = 0;
        public void show()
        {
            Hello(c);
        }
        public void Hello(char c)
        {
            c='a';
        }
    }
  private void Form1_Load(object sender, EventArgs e)
        {
            Class1 c1 = new Class1();
            c1.show();
        }

调试结果是这样的。我们可以看到c1.c的值还是' '。而c这个变量的值是a。结过和使用ref的进行比较下看看
我们发现使用了ref的话,c1.c的值也跟着发生了变化。这就是ref的进行引用调用的好处。也就相当于C语言中的传址调用。

评分

参与人数 1技术分 +2 收起 理由
czwanglei + 2

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马