C#中关于引用传递的问题

问题描述

我想实现:有一引用变量,如ObjectA;然后有一个数据块,比如用结构体记录一些信息,其中包括A的引用信息。然后一个程序段通过操作这个数据块,能够给A付值。这在C++里应该比较容易实现,比如用指向指针的指针等,但在C#里好像没有实现的方法。C++例子大概如下:classA{}A*a;structX{A**P;}程序段intmain(){AnewA;XnewX;X.P=&a;//其他操作...........................*(X.P)=&newA;//这样就把newA的地址付给a了}C#能实现类似的功能么???

解决方案

解决方案二:
string[]arr=newstring[5];varb=arr;//这不就是传递地址了吗?

解决方案三:
值类型复制,引用类型传递地址
解决方案四:
我印象中除了几种基础类型intfloat是值传递,稍微复杂一点的都是引用传递,什么List、对象啥的。
解决方案五:
string[]arr=newstring[5];varb=arr;//这不就是传递地址了吗?我是想通过对b付值来修改arr比如:string[]arr=newstring[5];varb=arr;//这不就是传递地址了吗?b=newstring[6];//这样arr的值不会变吧。
解决方案六:
我是想通过一中间变量,能对变量的引用对象进行修改。比如:两个变量X,Y引用变量A指向X(即A=X)另有一变量B我想通过修改B,能达到让A指向Y这在C++里能通过指向指针的指针来实现。可C#里怎么搞?
解决方案七:
voidSet(refstring[]aaa){}Set(refb)

解决方案八:
通过重新给B分配地址,来达到让A也指向新地址,好像实现不了……
解决方案九:
除非你写unsafe代码
解决方案十:
恩。好的,谢谢了。过会儿结贴
解决方案十一:
引用5楼zzybird的回复:

我是想通过一中间变量,能对变量的引用对象进行修改。比如:两个变量X,Y引用变量A指向X(即A=X)另有一变量B我想通过修改B,能达到让A指向Y这在C++里能通过指向指针的指针来实现。可C#里怎么搞?

C#实现不了这个除非你在C#中使用指针
解决方案十二:
按值类型传递引用类型classMyInfo{publicstringMyName;//定义一个字符串类型变量存储用户姓名publicintMyAge;//定义一个整数类型变量存储用户年龄publicMyInfo(stringname,intage)//创建一个带参数的构造函数{MyName=name;MyAge=age;}//codego.net/1/1/1/publicMyInfo(){}//默认构造函数publicvoidPrintInfo()//创建一个公有方法输出用户年龄信息{Console.WriteLine("{0}年龄是{1}岁",MyName,MyAge);}}创建方法带入值publicstaticvoidSendAPersonByValue(refMyInfoinfo){info.MyAge=99;//改变'info'的值info=newMyInfo("关新宇",25);//”info”现在指向了堆上的一个新对象}在Main函数中实现引用传递staticvoidMain(string[]args){Console.WriteLine("输出用户年龄信息:");MyInfofred=newMyInfo("赵启明",29);Console.WriteLine("未改变用户信息前");fred.PrintInfo();SendAPersonByValue(reffred);Console.WriteLine("改变后的用户年龄信息:");fred.PrintInfo();}

时间: 2024-12-21 00:59:12

C#中关于引用传递的问题的相关文章

c语言-c中关于引用传递的举例还是没看懂怎么理解,形参中的&还能按取地址符号来用吗

问题描述 c中关于引用传递的举例还是没看懂怎么理解,形参中的&还能按取地址符号来用吗 解决方案 当作取地址的时候,&是一个一元运算符,和! ~ * -等类似.作为按引用传递的时候,&不是运算符,是修饰符. 函数定义中不能出现运算符. 不信你试试 int foo(int -a) int foo(int !a) 都是不能编译的. 解决方案二: 引用是引用,取地址是取地址.不同上下文,一个符号有不同的用途,不要瞎联系. 解决方案三: &还可以是按位and运算符呢.*还可以是乘法运

理解Java中的引用传递和值传递

关于Java传参时是引用传递还是值传递,一直是一个讨论比较多的话题,有论坛说Java中只有值传递,也有些地方说引用传递和值传递都存在,比较容易让人迷惑.关于值传递和引用传递其实需要分情况看待,今天学习和分析一下,着急可以先看最后的结论. >>基本类型和引用类型在内存中的保存 Java中数据类型分为两大类,基本类型和对象类型.相应的,变量也有两种类型:基本类型和引用类型. 基本类型的变量保存原始值,即它代表的值就是数值本身: 而引用类型的变量保存引用值,"引用值"指向内存空间

C#中的引用传递、值传递

一.传递参数 既可以通过值也可以通过引用传递参数.通过引用传递参数允许函数成员(方法.属性.索引器.运算符和构造函数)更改参数的值,并保持该更改. 二.传递值类型参数 值类型变量直接包含其数据,这与引用类型变量不同,后者包含对其数据的引用.因此,向方法传递值类型变量意味着向方法传递变量的一个副本.方法内发生的对参数的更改对该变量中存储的原始数据无任何影响.如果希望所调用的方法更改参数的值,必须使用 ref 或 out 关键字通过引用传递该参数.为了简单起见,下面的示例使用 ref. 1. 通过值

java中的引用传递-Integer 对象在函数之间的引用传递起不到全局的作用

问题描述 Integer 对象在函数之间的引用传递起不到全局的作用 //实现排序二叉树的第k个节点的查找 TreeNode target = KthNode(p2); public static TreeNode KthNode(TreeNode pRoot int k) { if(pRoot == null || k < 1 ){ return null; } //ArrayList<Integer> list = new ArrayList<Integer>(); //l

java中如何区分值传递和引用传递

java中值传递和引用传递一直饱受争议难以区分,下面我通过几个例子来区分一下什么时间是值传递,什么时间是引用传递 1:首先先说值传递:基本类型(int ,float ,long,byte,short ,double, char,boolean)作为参数传递时,是传递值的拷贝,无论你怎么改变这个拷贝,原值是不会改变的 package com.test.list; public class Test1 { public static void main(String[] args) { int i

Java中的值传递和引用传递实例介绍_java

复制代码 代码如下: package Object.reference; public class People {     private String name;     private int age;     public People(){     }     public People(String name, int age) {         super();         this.name = name;         this.age = age;     }    

Java中引用传递

//Java中的引用传递 class Ref1{ int temp = 10 ; String Str = "hello"; } public class HelloWorld { public static void main(String[] args){ //案例一 /* Ref1 r1= new Ref1(); r1.temp = 20 ; System.out.println(r1.temp); tell(r1); System.out.println(r1.temp); *

c#中通过值和引用传递参数(downmoon)

c#中通过值和引用传递参数(downmoon)在 C# 中,既可以通过值也可以通过引用传递参数.通过引用传递参数允许函数成员(方法.属性.索引器.运算符和构造函数)更改参数的值,并保持该更改.若要通过引用传递参数,请使用 ref 或 out 关键字.为简单起见,本主题的示例中只使用了 ref 关键字.有关 ref 和 out 之间的差异的信息,请参见.使用 ref 和 out 传递数组. 本主题包括下列章节: 传递值类型参数 传递引用类型参数它还包括以下示例: 示例 演示 是否使用 ref 或

c#中通过值和引用传递参数

在 C# 中,既可以通过值也可以通过引用传递参数.通过引用传递参数允许函数成员(方法.属性.索引器.运算符和构造函数)更改参数的值,并保持该更改.若要通过引用传递参数,请使用 ref 或 out 关键字.为简单起见,本主题的示例中只使用了 ref 关键字.有关 ref 和 out 之间的差异的信息,请参见.使用 ref 和 out 传递数组. 本主题包括下列章节: 传递值类型参数 传递引用类型参数它还包括以下示例: 示例 演示 是否使用 ref 或 out 1 通过值传递值类型 否 2 通过引用