为什么我的Object不是NULL

时间:2016-07-20 07:38:15

标签: c# .net asp.net-mvc

我在我的程序中定义了一个对象日志。

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

enter image description here

3 个答案:

答案 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。