namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
try
{
User user =null;
user.ToHelloWorld ();
if (user == null)
{
Console.Write("world");
Console.Read();
}
else
{
Console.Write(user.UserName);
Console.Read();
}
}
catch
{
Console.Write("hello world");
Console.Read();
}
}
}
public class User
{
public string UserId { get; set; }
public string UserName { get; set; }
}
public static class UserExtention
{
public static void ToHelloWorld(this User user)
{
if (user == null)
{
user = new User() { UserName = "hello" };
}
}
}
}
这段代码的输出结果为WORLD。调试发现在执行完 user.ToHelloWorld ();后User还是为NULL。请问大神们这是为什么?
User user =null; 和 静态类下的扩展 是2个不同的对象
User user =null;
user.ToHelloWorld ();
一个为null的user对象。对于null对象,你是无法操作其属性的。
初始化对象的时候不建议初始化为null。
User user =null; 改为 User user = new User { UserId="XXX",UserName="XXX"};
静态类的扩展方法是一个语法糖,
user.ToHelloWorld ()其实就是UserExtention.ToHelloWorld (user);
如果了解参数的传递,你就知道方法里的User user只是一个副本。
除非用ref修饰参数,不过用this修改的参数不能用ref修饰
原来如此,谢谢