Maison  >  Article  >  développement back-end  >  Types de référence C# : comparaison entre le passage par valeur et le passage par référence

Types de référence C# : comparaison entre le passage par valeur et le passage par référence

php是最好的语言
php是最好的语言original
2018-08-04 14:16:002166parcourir

1, transmettre par valeur

La valeur est transmise par valeur. L'essence du passage du type de référence par valeur est de transmettre la valeur. Lorsque le paramètre est un type valeur, la "valeur" est. l'instance elle-même, donc le transmis Il s'agit d'une copie d'instance et n'affectera pas l'instance d'origine ; lorsque le paramètre est un type de référence, la "valeur" est une référence d'objet, donc ce qui est transmis est une copie de l'adresse de référence, qui changera le point de référence de l’objet d’origine.
String est un type de référence. L'effet du passage d'une chaîne par valeur est le même que l'effet du passage d'un type de valeur par valeur est spécial ici.
Lorsqu'un paramètre est passé lors de l'appel d'une méthode, la méthode crée d'abord une variable dans la pile en fonction du type de paramètre, puis attribue la valeur du paramètre à la variable. Par conséquent, l’instance de transfert de type valeur et de type chaîne reste inchangée et l’adresse de transfert de type référence change. Mais si elle est passée par référence, l'adresse est transmise et la valeur de l'instance changera.

2. Passer par référence
Ref et out passés par référence, qu'il s'agisse d'un type valeur ou d'un type référence, le passage par référence doit être modifié avec le mot-clé ref ou out Ref nécessite que les paramètres. avant de passer, l'initialisation doit être affichée en premier, ce qui n'est pas requis pour la sortie. C'est-à-dire que le paramètre utilisant ref doit être un objet réel et ne peut pas pointer vers null ; tandis que le paramètre utilisant out peut accepter un objet pointant vers null, et l'objet doit alors être matérialisé à l'intérieur de la méthode appelante.

Les types de valeurs ne sont pas encadrés lorsqu'ils sont passés par référence.

Passage par référence, ce qui est passé n'est pas la valeur du paramètre lui-même, mais l'adresse du paramètre. Si le paramètre est un type valeur, l'adresse du type valeur est transmise ; si le paramètre est un type référence, l'adresse de la référence de l'objet est transmise. Le résultat du passage d'un type référence par référence est le même que celui du passage par valeur. .

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

est la suivante :

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;
    }

Articles connexes :

Écrire une extension PHP en utilisant C/C++

[Tutoriel c#] Types de données C#

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn