当前位置:  开发笔记 > 编程语言 > 正文

C#参数化为方法时变量与对象的范围

如何解决《C#参数化为方法时变量与对象的范围》经验,为你挑选了1个好方法。

我广泛使用了继承,多态,封装,但我才意识到我不知道对象范围与变量的以下行为.差异最好用代码显示:

public class Obj
{
    public string sss {get; set;}

    public Obj()
    {
        sss = "0";
    } 
}     

public partial class testScope : System.Web.UI.Page
 {
    protected void Page_Load(object sender, EventArgs e)
    { 
        Obj a = new Obj(); 
        String sss = "0";            
        Context.Response.Write(sss); // 0

        FlipString(sss);
        FlipString(a.sss);
        Context.Response.Write(sss + a.sss); // 0 0

        FlipObject(a);
        Context.Response.Write(a.sss); // 1
        Context.Response.End();
    }

    public void FlipString(string str)
    { str = "1"; }

    public void FlipObject(Obj str)
    { str.sss = "1"; }
}

所以我认为当变量传递给方法时,更改仅限于方法的范围.但似乎如果一个对象被传递给一个更改为它的方法,那么它的属性将超出该方法.

我可以接受这个,如果规则是这个行为存在于对象而不是变量,但在.net中,一切都是一个对象,一个字符串(就像示例中的那个是System.String)那么规则怎么样,我怎么能预测我传入方法的参数范围?



1> Jon Skeet..:

您永远不会将对象作为参数传递 - 您只传递引用或值类型值.除非使用ref关键字,否则参数将按值传递 - 即参数的初始值是参数的计算值,并且调用者看不到参数值的更改.

但是,理解参数的值(对于引用类型)只是参考是非常重要.如果更改引用所引用的对象的内容,则调用者看到更改.

这是一个值得多于几个段落的主题 - 我建议你阅读我关于.NET中参数传递的文章以获取更多信息.

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有