C#通过引用传递(ref关键字)问题

沙皮罗

我在理解refC#中关键字的确切含义时遇到了麻烦在我的C ++代码中,我正在创建一个字符串变量以及一个指向它的指针和引用变量。我将其传递给Delete或Change函数,并且正如预期的那样,所有3个变量都已被修改。

但是,使用C#,我正在创建变量x,并使用字符串数据对其进行初始化。我正在创建一个变量y该变量在幕后应该是对的引用x然后,我用一个关键字传递xChangeorDelete方法ref,导致该方法内部的变量以及x被修改。但是,y即使它应该是对的引用也不能进行修改,x就像在C ++中一样。这也不只是字符串的问题,因为我已经使用C#对象尝试了上述测试,并且得到了相同的结果。

这是我执行时按值y复制x意思var y = x吗?

C ++

#include <iostream>
using namespace std;

void Delete(string &variable)
{
    variable = "";
}

void Change(string &variable)
{
    variable = "changed data";
}

void main()
{
    string x = "data";
    string *y = &x;
    string &z = x;
    Delete(x);
}

C#

namespace ConsoleApplication1
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var x = "data";
            var y = x;
            Change(ref x);
        }


        public static void Delete(ref string variable)
        {
            variable = null;
        }

        public static void Change(ref string variable)
        {
            variable = "changed";
        }
    }
}
海莫维兹博士

这行:var y = x; 在x#中创建ya的副本,而不是在c#中对x的引用,因此在调用Changed函数时不应进行更改。

似乎没有一种简单的方法可以用C#(或大多数其他语言)重现相同的C ++行为。

当您将非值类型的对象作为参数传递给函数时,对象将按值传递,而对象内容(属性/字段等)则按引用传递(可以从函数内部进行更改),当您使用“ ref”关键字传递对象,该对象本身就是byref,并且也可以更改(与在c ++ / c中发送指针与向结构发送双指针(由指针本身保留指针)相同)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Swift是否有类似“ ref”这样的关键字来强制参数通过引用传递?

来自分类Dev

使用ref关键字按引用传递变量

来自分类Dev

通过“ in”关键字传递整数顶点属性的问题

来自分类Dev

使用ref关键字传递值

来自分类Dev

是否可以使用params关键字通过ref传递对象?

来自分类Dev

如何通过引用机器人框架关键字来传递参数?

来自分类Dev

C#使用关键字的范围

来自分类Dev

在C#中覆盖关键字

来自分类Dev

C#中的“ This”关键字

来自分类Dev

JSON 使用 C# 关键字

来自分类Dev

C#“new”关键字

来自分类Dev

使用inout关键字:是通过引用传递或通过复制输入复制输出的参数(/按值结果调用)

来自分类Dev

C#6 / C ++ ref关键字错误

来自分类Dev

通过C#中的ref关键字调用类对象

来自分类Dev

无法在C#中使用as关键字作为字符串引用类型的装箱

来自分类Dev

为什么我不能在C#中将Type变量传递给关键字“ default”?

来自分类Dev

递归传递关键字

来自分类Dev

在C#中通过引用传递值的语法问题

来自分类Dev

在C#中通过引用传递值的语法问题

来自分类Dev

使用指针和ref关键字引用值之间有什么区别

来自分类Dev

C ++中的register关键字有什么问题?

来自分类Dev

通过部分关键字C#Selenium复制全文

来自分类Dev

将未初始化的参数传递给方法时的ref关键字

来自分类Dev

C#是否等效于C ++朋友关键字?

来自分类Dev

C#中的DLL C ++等价性(关键字“ IN”)

来自分类Dev

关键字“自动” C ++和“动态” C#

来自分类Dev

C ++等同于C#值关键字

来自分类Dev

关键字“自动” C ++和“动态” C#

来自分类Dev

C++ 等效于 C# 对象关键字

Related 相关文章

热门标签

归档