标签: ref

返回与使用参考参数

这真是让我烦恼,来自C#背景.

有时,我看到这样写的函数:

int computeResult();
Run Code Online (Sandbox Code Playgroud)

这就是我习惯的.但后来我发现它们写得像这样:

void computeResult(int &result);
Run Code Online (Sandbox Code Playgroud)

我觉得这很奇怪.如果有的话,第二种方法比第一种方法有什么好处?必须有一些东西,因为我一直都在看.

c++ ref return-value

19
推荐指数
1
解决办法
6716
查看次数

在C#中,你在哪里使用参数前面的"ref"?

关于"ref"和"out"参数的定义已经存在许多问题,但它们看起来像是糟糕的设计.您是否认为ref是正确的解决方案?

看起来你总能做一些更干净的事情.有人能给我一个例子,说明这将成为问题的"最佳"解决方案吗?

c# ref

18
推荐指数
3
解决办法
4942
查看次数

使用out和ref参数时的装箱和拆箱

当方法接受ValueType的out/ref参数时,是否会发生装箱/取消装箱?

c# boxing unboxing ref out

18
推荐指数
1
解决办法
3168
查看次数

如何在 refs 更改时重新渲染

代码:

import DrawControl from "react-mapbox-gl-draw";

export default function MapboxGLMap() {
    let drawControl = null
    return(
      <DrawControl ref={DrawControl => {drawControl = DrawControl}}/>
    )
}
Run Code Online (Sandbox Code Playgroud)

我想在drawControl非空时加载数据。我检查了可能使用回调引用的文档。

那么,我如何监听drawControl更改并加载数据?

javascript ref reactjs

18
推荐指数
2
解决办法
2万
查看次数

ref为变量而不是函数中的参数

假设我有一个Person班级并且具有以下内容:

Person A = new Person("Tom");
Person B = A;
Run Code Online (Sandbox Code Playgroud)

有没有一种方法,我可以改变它,这样,如果我分配一个新的PersonB,B = new Person("Harry"),A是指同一个实例吗?我知道你可以ref在函数中的参数赋值中做到这一点.

c# ref

17
推荐指数
1
解决办法
1万
查看次数

powershell:如何从[ref]变量写入主机值

我是Powershell的新手,我正在尝试研究如何在函数中打印[ref]变量的值.

这是我的测试代码:

function testref([ref]$obj1) {
  $obj1.value = $obj1.value + 5
  write-host "the new value is $obj1"
  $obj1 | get-member
}


$foo = 0
"foo starts with $foo"
testref([ref]$foo)
"foo ends with $foo"
Run Code Online (Sandbox Code Playgroud)

我从这个测试得到的输出如下.你会注意到我没有像我希望的那样得到$ obj1的值.我也试过在写入主机的调用中传入$ obj1.value但是生成了相同的响应.

PS > .\testref.ps1
foo starts with 0
the new value is System.Management.Automation.PSReference


   TypeName: System.Management.Automation.PSReference

Name        MemberType Definition
----        ---------- ----------
Equals      Method     bool Equals(System.Object obj)
GetHashCode Method     int GetHashCode()
GetType     Method     type GetType()
ToString    Method     string ToString()
Value       Property   System.Object Value {get;set;}
foo ends with …
Run Code Online (Sandbox Code Playgroud)

powershell function ref

17
推荐指数
1
解决办法
5万
查看次数

如何保存ref变量供以后使用?

所以这有效..

public MyClass(ref Apple apple)
{
    apple = new Apple("Macintosh"); // Works fine
}
Run Code Online (Sandbox Code Playgroud)

但有可能做这样的事情吗?

private Apple myApple;

public MyClass(ref Apple apple)
{
    myApple = apple;
}

public void ModifyApple()
{
    myApple = new Apple("Macintosh"); // does not change the input variable like the first example did
}
Run Code Online (Sandbox Code Playgroud)

当ref变量被复制到成员变量时,myApple它似乎失去了它的'ref-ness'并且重新赋值它不再改变输入变量.有没有解决的办法?

c# reference ref

16
推荐指数
2
解决办法
7864
查看次数

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

我用我现有的解决方案尝试了VS2015,我得到了一些有效的新错误(比如编译器之前没有捕获到的无法访问的代码),但是我在这一行上也遇到了错误:

bool bWasAlreadyLocked = false;
oEnv.LockDoc(oWarnings, oEventDoc, ref bWasAlreadyLocked);
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

错误CS1503参数3:无法从'ref bool [mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]'转换为'ref bool [mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089] "

我不明白为什么它会抛出那个错误,显然类型确实匹配.这是新编译器中的错误还是ref关键字的行为发生了变化?

这种情况下的函数是一个C++函数,它使用从c ++类派生的ac#类导入到C#.它的签名是这样的:

void CBkgDocEnvX::LockDoc(
CFIWarningList ^oWarnings,
CBaseDoc ^oBaseDoc,
// Output
bool %rbWasAlreadyLocked)
Run Code Online (Sandbox Code Playgroud)

值得一提的是,我现在选择在解决方案中使用VS2013 c ++编译器作为c ++源代码,因此c ++方面应该与以前一样.我的猜测是c#和c ++之间的互操作发生了变化.

c# c++ interop ref roslyn

16
推荐指数
1
解决办法
1000
查看次数

通过ref将函数传递给委托是否有区别?

我遇到了一段使用委托的C#代码,并通过引用将该函数传递给委托......

        delegate bool MyDel(int x);
        static bool fun(int x) {
            return x < 0;
        }
        public static void Main() {
            var d1 = new MyDel(fun);       // what I usually write
            var d2 = new MyDel(ref fun);   
        }
Run Code Online (Sandbox Code Playgroud)

编译器没有抱怨并且建立了项目.我在运行一些测试用例时没有发现任何差异,这种语法与通常的语法有什么不同?

更新

正如InBetween所提到的,似乎这种语法也是有效的(而且它的意义更小)

var d3 = new MyDel(out fun);
Run Code Online (Sandbox Code Playgroud)

c# delegates reference ref

16
推荐指数
1
解决办法
391
查看次数

在 C# 中,为什么“in”参数不能在本地函数中使用?

例如,

public int DoSomething(in SomeType something){
  int local(){
     return something.anInt;
  }
  return local();
}
Run Code Online (Sandbox Code Playgroud)

为什么编译器会发出无法在局部函数中使用 some 变量的错误?

c# ref nested-function c#-7.0 local-functions

15
推荐指数
1
解决办法
1151
查看次数