C# 在C中作为参数传递COM对象#
给出以下代码,有人能解释为什么我可以将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
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???
现在,字符串
引用指的是类型为类型
的对象,该类型错误且非常不安全