Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中作为参数传递COM对象#_C#_.net_Com - Fatal编程技术网

C# 在C中作为参数传递COM对象#

C# 在C中作为参数传递COM对象#,c#,.net,com,C#,.net,Com,给出以下代码,有人能解释为什么我可以将COM对象作为值参数传递,而不是作为引用参数传递吗 private void TestRelease() { Excel.Workbook workbook = excel.ActiveWorkbook; ReleaseVal(workbook); // OK ReleaseRef(ref workbook); // Fail } private void ReleaseVal(Object obj) { i

给出以下代码,有人能解释为什么我可以将COM对象作为值参数传递,而不是作为引用参数传递吗

private void TestRelease()
{
    Excel.Workbook workbook = excel.ActiveWorkbook;
    ReleaseVal(workbook);       // OK
    ReleaseRef(ref workbook);   // Fail
}

private void ReleaseVal(Object obj)
{
    if (obj != null)
    {
        Marshal.ReleaseComObject(obj);
        obj = null;
    }
}

private void ReleaseRef(ref Object obj)
{
    if (obj != null)
    {
        Marshal.ReleaseComObject(obj);
        obj = null;
    }
}

这与COM对象无关,只是C#的一条规则。除非引用的类型与参数类型相同,否则不能将引用类型传递给
out
ref
参数

否则,它将允许出现以下不安全的情况

public void Swap(ref Object value) {
  value = typeof(Object);
}

string str = "foo";
Swap(out str); // String now has an Type???
现在,
字符串
引用指的是类型为
类型
的对象,该类型错误且非常不安全