| 在C#里面  引用类型 的参数 和对象  内部保存的都只是引用. → 当前实例存放在 托管堆上的地址 当你的一个方法  ShowName(string name)  调用 并传递一个   参数进去的时候. 其实本质上 ShowName 方法获取到的是当前参数的引用.
 引用有没有数据  这个方法是不管的.
 当时此方法会通过参数的引用   得到当前参数的类型指针 → 它根据你传入的参数 是否为 string类型 或者是string 类型的子类.如果 上述两种情况都成立的话.
 那么在编译器的级别 它会让你编译通过. 但是到运行的时候,如果 你之前传递的引用 确实没有值的话 那么就被报一个非常经典的错误 "未将参数对象引用到参数的实例"  .
 补充一点: 当你方法的参数 为string的时候,那么你传递的参数 就必须为string类型. 原因是 string 类 在.NET 中被申明成了一个密封类.密封类不能被继承.
 在C#中 方法的参数是协变的. 但是 string 是一个密封类 它不具备 参数协变的前提.
 |