当前位置: 首页 > news >正文

电子网站建设考试/网站推广优化排名seo

电子网站建设考试,网站推广优化排名seo,网络建设与网站建设,做外贸网站价格前阵子有人问了这样一道问题,就是说,明明类是引用类型,为什么传递进方法之后的改变不会改变到Main方法里面的值。 从这里,我想有必要解释一下。 首先传递一般有四种情况,值类型按值传递,值类型按引用传递&a…

前阵子有人问了这样一道问题,就是说,明明类是引用类型,为什么传递进方法之后的改变不会改变到Main方法里面的值。

从这里,我想有必要解释一下。

首先传递一般有四种情况,值类型按值传递,值类型按引用传递,引用类型按值传递,以及引用类型按引用传递。


我们先看下面的代码:

ContractedBlock.gifExpandedBlockStart.gifCode
class Value
ExpandedBlockStart.gifContractedBlock.gif    
{
        
public int i = 15;
    }

    
class Program
ExpandedBlockStart.gifContractedBlock.gif    
{
        
static void Main(string[] args)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            Program t 
= new Program();
            t.first();
        }

        
public void first()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            
int i = 5;
            Value v 
= new Value();
            v.i 
= 25;
            second(v, i);
            Console.WriteLine(v.i);
            Console.Read();
        }

        
public void second(Value v, int i)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            i 
= 0;
            v.i 
= 20;
            Value val 
= new Value();
            v 
= val;
            Console.WriteLine(v.i 
+ " " + i + " ");
        }

}

 

 如上所示,我们可以看到两种传递情况:

 

public void second(Value v, int i)

 

分别是:引用类型按值传递,跟值类型按值传递,

首先值类型按值的传递很多人都了解,过程是:

发生方法调用时,CLR 生成了一个相对应的副本,并将该副本传递进方法中,以后的修改都只针对副本,而不会改变原来的值。

 

然后我们详细讨论一下,引用类型的传递。

 

同样的,当我们调用下面的方法时;

 

public void second(Value v, int i)

 

很多人就会问,引用类型传递的不是他本身吗?其实这里有个误区,引用类型传递的是引用而不是他本身,

 

就像这样:

 public void second(Value V, int i)
        {
            i 
= 0;
            V.i 
= 20;
            Value val 
= new Value();
            V 
= val;
            Console.WriteLine(v.i 
+ " " + i + " ");
        }

 

 

在这个方法体中,我们可以用一个v来代替传递进来的Value;其实发生的是这样的一种情况,

方法开始时,CLR为我们创建了一个

Value V = 传递进来的v

 

画成图应该是这样:

 

然后方法调用的时候,产生了一个vcopy,就是V,也指向托管堆中v的确切数据。

 

然后我们看到了方法体中这样的代码:

V.i = 20;
   Value val 
= new Value();
   V 
= val;

 

首先因为V现在是指向 v的确切数据的, 所以V.i = 20 改变了外面v.i的值。

很多人就在这里迷惑了,觉得,这时方法外的v也会因为Value的构造函数,而变成15

但事实是那个我们在内存里发生的却是这样的情况:

 

因为Value val = new Value();

产生了一个新的对象,并由Val指向它。

 

接着,又因为以下代码,: V = vla;    使得V 指向了val所在的数据

 

 

最后,因为val 只是个局部变量,在方法结束后他就会结束它的生命周期,等待垃圾回收。

 

暂时讲到这里,太长了下回待续。>_< 欢迎各位敲砖~

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/SinSay/archive/2009/05/11/1454433.html

http://www.jmfq.cn/news/4997071.html

相关文章:

  • 山西省网站建设/杭州seo网站排名优化
  • 太仓网站建设平台/网络营销的方法
  • 公司网站建设工作通知/免费个人自助建站
  • 天津业之峰装修公司地址/搜索引擎优化seo多少钱
  • 免费网站奖励自己的软件/今天百度数据
  • 程序可以做网站吗/今日头条10大新闻
  • 公司网站建设的市场需求/近期的新闻热点
  • 海南注册公司在哪个网站/怎么在百度发广告
  • 高端品牌网站建设优势/游戏推广引流软件
  • wordpress修改站点地址/seo教学培训
  • 专门做同人h的网站/网站安全
  • 眉山 网站开发/广告公司网上接单平台
  • 企业网站建设ppt介绍/行者seo
  • 找活做的网站/市场推广方案怎么做
  • wordpress网站描述/7月新闻大事件30条
  • 企业建立网站的优势/企业网站模板设计
  • 国外做动运服装的网站/搜狗收录
  • 重庆专业做网站的公司/深圳的seo网站排名优化
  • 网站下载的软件怎么安装/外贸推广方式
  • 政府采购网上商城怎么注册/快速排名优化推广手机
  • angular2做的网站有/十大流量平台
  • 天眼查河南建设网站公司/怎么样建立自己的网站
  • 自己做网站的劣势/高端网站定制公司
  • html5 手机网站 模版/最新的域名网站
  • 上海定制网站建设公司哪家好/常州百度seo排名
  • 温州移动网站建设服务商/网站建设需要啥
  • 网站建设技术支持牛商网/国际重大新闻
  • 网站网页切换怎么做的/logo网站设计
  • 教育部精品课程网站/腾讯广告官网
  • 做外贸的网站主要有哪些内容/深圳网络营销