我使用的是VS 2008,並且在我的項目屬性頁中,我發現我的目標是.Net 3.5。C#3中的自動屬性 - 如果我聲明瞭一個集合,就必須聲明一個實體?
這裏是在編譯的時候,我發現了錯誤:因爲它沒有標記爲抽象
AMSDataModels.Vehicle.VIN.get」必須聲明主體,EXTERN或部分
這裏是代碼:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace AMSDataModels
{
public class Vehicle
{
//NodeID for datastore persistance
public Guid NodeID { get; set; }
public string VIN { get;
set {
if (value.Length != 17) throw new ArgumentOutOfRangeException("VIN", "VIN must be 17 characters");
} }
public string Make { get; set; }
public string Model { get; set; }
}
}
如果我從集合剝去身上,這樣它只是:
public string VIN { get; set; }
所有的工作,但我失去了檢查VIN的能力,因爲它設置。
有沒有人有建議如何解決這個問題或更好的方法來解決手頭的問題?
我真的很喜歡速記符號 - 但驗證輸入的合法性也很重要!
感謝大家注意到我實際上並沒有在任何地方設置值 - 老實說,我還沒有弄清楚編譯器創建的局部變量被調用了。有沒有特殊的關鍵字? – Matt 2009-07-13 20:51:17
沒有特殊的關鍵字 - 編譯器無法訪問自動生成的東西。這使得生成的代碼的強大之處在於簡單性以及編譯器準確瞭解其訪問方式的能力。如果你能夠定義或訪問汽車領域,那麼編譯器就不能對其使用做出儘可能多的假設。 – 2009-07-13 20:54:02
當你嘗試使用INotifyPropertyChanged時,你會遇到同樣的問題,自動屬性的美麗很快就會丟失:( – Nate 2009-07-13 21:01:10