編譯器警告 (層級 1) CS0197
將 'argument' 當做 ref 或 out 傳遞或取得它的位址可能會導致執行階段例外狀況,因為它是 marshal-by-reference 類別的欄位
任何直接或間接衍生自 MarshalByRefObject 的類別都是 marshal-by-reference 類別。 這類類別可以跨處理序與機器界限,藉傳址進行封送處理。 因此,這種類別的執行個體可以是遠端物件的 Proxy。 您無法將 Proxy 物件的欄位當成 ref 或 out傳遞。所以,您無法將這種類別的欄位當做 ref
或 out
傳遞,除非執行個體是 這個,其不可為 Proxy 物件。
下列範例會產生 CS0197。
C#
// CS0197.cs
// compile with: /W:1
class X : System.MarshalByRefObject
{
public int i;
}
class M
{
public int i;
static void AddSeventeen(ref int i)
{
i += 17;
}
static void Main()
{
X x = new X();
x.i = 12;
AddSeventeen(ref x.i); // CS0197
// OK
M m = new M();
m.i = 12;
AddSeventeen(ref m.i);
}
}