值类型和引用类型

san*_*ngh 1 c#

我在下面的代码片段中总结了我的问题.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication13
{
    public class Student
    {
        public int Marks { get; set; }
        public Student(int marks)
        {
            this.Marks = marks;

        }
        public void AssignMarks(Student st)
        {
            st = null;
        }
        public void AssignMarks(ref Student st)
        {
            st = null;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Student st = new Student(50);
            st.AssignMarks(st);
            Console.WriteLine(st.Marks);
            Student st1 = new Student(50);
            st.AssignMarks(ref st1); // NullReferenceException
            Console.WriteLine(st1.Marks);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么我在标有**的行上得到NullReferenceException异常

SLa*_*aks 5

你实际上是在WriteLine通话中得到了例外.(我试过了)

因为st1传递ref,您传递的变量变为null.

ref参数是对一个参考变量,而不是一个对象的引用.
因此,如果方法将其ref参数更改为指向不同的对象,则将更改其引用的变量.