简单的OOP理解

Cra*_*aig 0 c# oop asp.net-mvc-3

我有一节课:

public class TaskDiplayModel
{
    public int taskId { get; set; }

    [DisplayName("Task Description")]
    public string description { get; set; }

    [DisplayName("Priority")]
    public string priority { get; set; }

    [DisplayName("State")]
    public string state { get; set; }

    [DisplayName("Due By")]
    public DateTime deadline { get; set; }

    [DisplayName("Created By")]
    public PersonObject created_by { get; set; }

    [DisplayName("Assigned To")]
    public PersonObject assigned_to { get; set; }

    [DisplayName("Category")]
    public string category { get; set; }

    [DisplayName("Sub Category")]
    public string subCategory { get; set; }

    [DisplayName("Created")]
    public DateTime createdDate { get; set; }

    [DisplayName("Updated")]
    public DateTime lastUpdatedDate { get; set; }

    [DisplayName("Updated By")]
    public PersonObject lastUpdatedBy { get; set; }    
}
Run Code Online (Sandbox Code Playgroud)

然后我有另一个继承自这个类的类:

public class TaskModifyModel : TaskDiplayModel
{
    public int priorityId { get; set; }
    public int stateId { get; set; }
    public int categoryId { get; set; }
    public int subCategoryId { get; set; }

    public SelectList states { get; private set; }
    public SelectList priorities { get; private set; }
    public SelectList categories { get; private set; }
    public SelectList subCategories { get; private set; }

    public TaskModifyModel()
    {
        SetupReferenceData(0);
    }

    public TaskModifyModel(int taskId)
    {

        var taskService = new TaskService();
        var task = taskService.GetTask(taskId);
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的应用程序中,我创建了一个TaskModifyModel对象.但是,基类的字符串字段是null.我希望它们已经被创造出来了String.Empty.但是当我尝试访问它们时,我会遇到异常.我错过了什么吗?

顺便说一下,这些是MVC3模型....而且我认为这些类的代码与问题无关.

Cod*_*ike 8

在.NET中,字符串的默认值null不是String.Empty,因此,除非您专门设置属性的值String.Empty,否则它们将保留null.

假设您希望字符串属性默认为空字符串而不是null,通常可以通过在构造函数中设置它们来执行此操作:

public void TaskDiplayModel()
{
    description = String.Empty;
    priority = String.Empty;
    state = String.Empty;
}
Run Code Online (Sandbox Code Playgroud)

或者使用字段支持的属性而不是auto属性,并设置支持字段:

private string _description = String.Empty;

[DisplayName("Task Description")]
public string description
{
    get { return _description; }
    set { _description = value; }
}
Run Code Online (Sandbox Code Playgroud)

就个人而言,我通常使用第一个选项,在构造函数中执行它,因为代码较少.