我在我的程序中定义了一个对象日志。
LoginModel log = new LoginModel ( ) ;
我不会在其中写入值。但是当我的函数返回它时,为什么对象不是NULL? (见图)
[Bind(Exclude = "UserID")]
public class LoginModel
{
[ScaffoldColumn(false)]
public int UserID { get; set; }
[ScaffoldColumn(false)]
public string FirstName { get; set; }
[Display(Name = "E-mailadresse")]
[Required(ErrorMessage = "Skriv venligst din e-mailadresse", AllowEmptyStrings = false)]
[EmailAddress(ErrorMessage = "Ugyldig e-mailadresse")]
[DataType(DataType.EmailAddress)]
public string Emailaddress { get; set; }
[Display(Name = "Kodeord")]
[Required(ErrorMessage = "Skriv venligst et kodeord", AllowEmptyStrings = false)]
[DataType(DataType.Password)]
[StringLength(8, MinimumLength = 4, ErrorMessage = "Kodeordet skal mindst bestå af 4-8 karakter.")]
public string Password { get; set; }
}
答案 0 :(得分:2)
代码LoginModel log = new LoginModel ( ) ;
将创建类LoginModel
的新实例,该实例将包含所有可访问的属性和具有默认值的字段。如果您希望log
为null,则表示声明如下:
LoginModel log;
注意:您应该将LoginModel
类的实例分配给log
以访问其中的值。否则它会抛出NullReferenceException
答案 1 :(得分:1)
当你新建一个对象时,它不再是null。
如果你有
LoginModel log;
或
LoginModel log =null;
然后它将为null。当你写作
LoginModel log = new LoginModel ( ) ;
它将新建你的对象并分配给变量(log),因此它不再是null。它将是具有属性的对象,因为您已在构造函数中初始化(在您的情况下,没有初始化,因此每个可空属性将为null,整数将为0,等等)
答案 2 :(得分:1)
https://en.wikipedia.org/wiki/Default_constructor
在Java和C#中,“默认构造函数”指的是一个无效的 如果没有,编译器自动生成的构造函数 已经为类定义了构造函数。默认构造函数 隐式调用超类的nullary构造函数,然后执行 一个空的身体。所有字段的初始值均为0 (整数类型),0.0(浮点类型),false(布尔类型)或 null(引用类型)。程序员定义的构造函数,不需要 参数在C#中也称为默认构造函数,但不在。{ Java
正如大家所说,如果你调用默认构造函数,那么该对象的值将不为null。