ホームページ >バックエンド開発 >C#.Net チュートリアル >C# 参照型: 値渡しと参照渡しの比較

C# 参照型: 値渡しと参照渡しの比較

php是最好的语言
php是最好的语言オリジナル
2018-08-04 14:16:002257ブラウズ

1, 値渡し

値は値によって渡されます。参照型を値によって渡すことの本質は、値を渡すことです。パラメータが値型の場合、「値」はインスタンスそのものなので、渡されるのはインスタンスのコピーであり、元のインスタンスには影響しません。パラメータが参照型の場合、「値」はオブジェクト参照であるため、渡されるのは参照アドレスのコピーです。これにより、元のオブジェクトの参照点が変更されます。
String は参照型です。文字列を値で渡す効果は、値型を値で渡す効果と同じです。ここでは文字列が特別です。
メソッドを呼び出してパラメータを渡す場合、メソッドはまずパラメータの型に従ってスタック内に変数を作成し、次にパラメータの値をその変数に割り当てます。したがって、値型と文字列型の転送インスタンスはそのままで、参照型の転送アドレスが変わります。ただし、参照渡しの場合はアドレスが渡されるため、インスタンスの値が変わります。

2、参照渡し
Ref および out 参照渡しは、値型か参照型かに関係なく、参照渡しは ref または out キーワードで変更する必要があります。ref にはパラメータが必要です。渡す前に初期化が最初に表示されますが、これは out には必要ありません。つまり、ref を使用するパラメータは実際のオブジェクトである必要があり、null を指すことはできませんが、out を使用するパラメータは null を指すオブジェクトを受け入れることができ、そのオブジェクトは呼び出し側メソッド内で実体化される必要があります。

値の型が参照によって渡される場合、値の型はボックス化されません。

参照渡し。渡されるのはパラメータ自体の値ではなく、パラメータのアドレスです。パラメータが値型の場合は値型のアドレスが渡され、パラメータが参照型の場合はオブジェクト参照のアドレスが渡されます。参照型の参照渡しの結果は、値渡しの場合と同じです。 。

int i = 100;//Ref需要显示初始化
int j;//out不需要显示初始化
Fun(ref i,out j);
void Fun(ref int i,out int j)
    {
        j = 100;//out必须完成对象的实体化
    }

は次のとおりです。

private void Awake()
    {
        SenderTest st = GetComponent<SenderTest>();//实例化类的对象
        st.i = 100;
        int i = 100;
        string s = "100";
        ChangeValue(i,s, st);//值类型,引用类型,按值传递
        print("value "+i+s+st.i);//value 100 100 200
        ChangeValue(ref i, ref s, ref st);//值类型,引用类型,按引用传递
        print("ref "+i + s + st.i);//ref 200 200 200
    }
    void ChangeValue(int i, string s, SenderTest st)
    {
        i = 200;
        s = "200";
        st.i = 200;
    }
    void ChangeValue(ref int i, ref string s, ref SenderTest st)
    {
        i = 200;
        s = "200";
        st.i = 200;
    }

関連記事:

C/C を使用した PHP 拡張機能の記述

【c#チュートリアル ]C# データ型

以上がC# 参照型: 値渡しと参照渡しの比較の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。