当前位置:编程学习 > C#/ASP.NET >>

关于ref和out

ref和out是不是VB里的BYVAL啊


能不能给点例子看看啊


=========================
下面时我写的
怎么老是报错啊?

        static void filldata(ref string stra)
        {



            stra = "你好!";
        }





        private void buttonX7_Click(object sender, EventArgs e)
        {
           string strc;
            string strb;
            strb = filldata(ref strc);

            MessageBox.Show(strb);


        }

错误信息 : 无法将类型“void”隐式转换为“string”   --------------------编程问答-------------------- static string filldata(ref string stra) 

stra = "你好!"; 
return sstra; --------------------编程问答--------------------  strb = filldata(ref strc); 

void filldata没有返回值的

string strc; 
//string strb; 
//strb = filldata(ref strc); 
//MessageBox.Show(strb); 
MessageBox.Show(strc); 
就是你要的结果


--------------------编程问答--------------------

 private void buttonX7_Click(object sender, EventArgs e) 
        { 
          string strc; 
            string strb; 
            filldata(ref strc); //此处更改

            MessageBox.Show(strb); 


        } 

--------------------编程问答--------------------
引用 1 楼 wuyq11 的回复:
static string filldata(ref string stra) 

stra = "你好!"; 
return sstra;

楼上很对 方法有类型是需要返回的
out 和ref的例子 你看看
using System;
class TestApp
{
 static void outTest(out int x, out int y)
 {//离开这个函数前,必须对x和y赋值,否则会报错。 
  //y = x; 
  //上面这行会报错,因为使用了out后,x和y都清空了,需要重新赋值,即使调用函数前赋过值也不行 
  x = 1;
  y = 2;
 }
 static void refTest(ref int x, ref int y)
 { 
  x = 1;
  y = x;
 }
 public static void Main()
 {
  //out test
  int a,b;
  //out使用前,变量可以不赋值
  outTest(out a, out b);
  Console.WriteLine("a={0};b={1}",a,b);
  int c=11,d=22;
  outTest(out c, out d);
  Console.WriteLine("c={0};d={1}",c,d);

  //ref test
  int m,n;
  //refTest(ref m, ref n); 
  //上面这行会出错,ref使用前,变量必须赋值

  int o=11,p=22;
  refTest(ref o, ref p);
  Console.WriteLine("o={0};p={1}",o,p);
 }

--------------------编程问答--------------------
引用楼主 hahahahaha1234567890 的帖子:
ref和out是不是VB里的BYVAL啊 


能不能给点例子看看啊 


========================= 
下面时我写的 
怎么老是报错啊? 

        static void filldata(ref string stra) 
        { 


            stra = "你好!"; 
        } 


        private void buttonX7_Click(object sender, EventArgs e) 
        { 
          string strc; 
            string strb; 
            strb = filldata(ref s…

1、首先你的strc、strb要先赋值,比如strc="";strb="";c#的先赋值原则。
2、filldata函数返回的是void,把void赋给string 类型的strb当然会报错。

帮你改下:
 static string filldata(ref string stra) 
        { 
           return stra = "你好!"; 
        } 
        private void buttonX7_Click(object sender, EventArgs e) 
        { 
            string strc=""; 
            string strb=""; 
            strb = filldata(ref strc); 
            MessageBox.Show(strb); 
        } 
--------------------编程问答-------------------- ... --------------------编程问答-------------------- 把VOID改成string 类型的,就OK了
这样的问题无非就是类型出错,平时自己可以试着改下类型。
调试也是一种好办法 --------------------编程问答-------------------- 楼上已有答案,
学习了。
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,