2010-06-18 46 views
12

Có thể đặt giá trị mặc định không có phần thân của thuộc tính không? Tốt hơn với chú thích.Đặt giá trị mặc định cho thuộc tính

[SetTheDefaultValueTo(true)] 
public bool IsTrue { get; set; } 

[SetTheDefaultValueTo(false)] 
public bool IsFalse { get; set; } 

public void Something() 
{ 
    var isTrue = this.IsTrue; 
    var isFalse = this.IsFalse; 
} 

Trả lời

18

Không, không có xây dựng trong khả năng thiết lập giá trị của một tài sản với siêu dữ liệu. Bạn có thể sử dụng một nhà máy của một số loại mà sẽ xây dựng trường hợp của một lớp học với sự phản ánh và sau đó có thể thiết lập các giá trị mặc định. Nhưng trong ngắn hạn, bạn cần phải sử dụng các nhà xây dựng (hoặc lĩnh vực setters ... được nâng lên constructor.) Để thiết lập các giá trị mặc định.

Nếu bạn có một số tình trạng quá tải cho cuộn dây bạn có thể muốn xem constructor chaining.

Sử dụng C# 6 + bạn có thể làm điều gì đó như thế này ...

public string MyValue { get; set; } = "My Default"; 

Ồ, nó được nhiều niềm vui hơn bởi vì mọi người thậm chí còn yêu cầu một cái gì đó như thế này ...

public string MyValue { 
    private string _myValue; 
    get { return _myValue ?? "My Default"; } 
    set { _myValue = value; } 
} 

... lợi thế là bạn có thể kiểm soát phạm vi của trường để chỉ được accesible trong mã tài sản, do đó bạn không phải lo lắng về bất cứ điều gì khác trong lớp học của bạn chơi với nhà nước mà không sử dụng getter/setter.

+0

Có nơi nào tôi có thể bỏ phiếu cho đối tượng địa lý này hay đại loại như vậy không? – BrunoLM

+1

Bạn có thể tìm thấy nội dung nào đó trên connect.microsoft.com. –

+1

eek ... Tôi vừa tìm thấy điều này trên CodeProject. Nó sử dụng sự phản chiếu để thiết lập các giá trị mặc định sau khi đối tượng đã được xây dựng. http://www.codeproject.com/KB/dotnet/AutoPropsDefaultValues.aspx –

14

Chỉ định giá trị thuộc tính mặc định trong hàm tạo lớp.

class MyClass 
{ 
    public MyClass() 
    { 
     IsTrue = true; 
     IsFalse = false; 
    } 

    public bool IsTrue { get; set; } 

    public bool IsFalse { get; set; } 

    [...] 

    public void Something() 
    { 
     var isTrue = this.IsTrue; 
     var isFalse = this.IsFalse; 
    } 

}

+2

này trông giống như câu hỏi của anh thay vì một câu trả lời cho điều đó. –

1

Trong ví dụ rất cụ thể này, bạn có loại có thể:

public bool IsFalse { get; set; } 
public bool IsTrue 
{ 
    get { return !IsFalse; } 
    set { IsFalse = !value; } 
} 

public void Something() 
{ 
    var isTrue = this.IsTrue; 
    var isFalse = this.IsFalse; 
} 

Nhưng, nói chung, không có.

2

Chủ đề cũ. Hình như Microsoft lắng nghe và tính năng này có sẵn trong .Net Framework 4.6+ (C# 6+) Bạn có thể sử dụng nó như

public string MyValue { get; set; } = "My Default"; 
3

Nếu bạn đang sử dụng C# 5 trở về trước, bạn phải làm điều đó trong một nhà xây dựng.

nhưng vì C# 6.0, khả năng có initializers tài sản tự động được bao gồm, và cú pháp là:

public int myage { get; set; } = 33; 
Các vấn đề liên quan