標籤:
使用VS開發U3D項目時,去察看某個變數的聲明,比如某組件的gameObject變數,會看到如下代碼
一看似乎有點暈,這代碼什麼意思啊,就一個 public GameObject gameObject {get;}
這有點像屬性的簡潔聲明:
但事實是這樣的嗎? 經過測試,並非如此
寫一個小程式來驗證下就知道了。
首先寫一個DLL程式,然後寫一個測試程式來引用這個DLL,在測試程式中對變數使用go to definition,我們看到,不論dll中定義的屬性有多麼複雜,go to definition總是只能看到簡單的 set; get;
DLL程式碼如下:
public class IMsg { public virtual void Print() { } } sealed public class xMsg : IMsg { string msg; public string Msg { set { if(msg.Length == 0) { msg = "init string"; } else { msg = value; } } get { return msg; } } public sealed override void Print() { Console.WriteLine(msg); }
引用DLL的測試程式碼如下:
class Program { static void Main(string[] args) { xMsg ox = new xMsg(); ox.Msg = "hello"; ox.Print(); } }
對 xMsg使用 go to definition 我們看到如下代碼:
namespace ClassLibrary1{ public sealed class xMsg : IMsg { public xMsg(); public string Msg { get; set; } public sealed override void Print(); }}
我們去嘗試開啟這個檔案所在的位置時得到如下,原來是VS產生的臨時檔案。
這說明了這種檔案只是VS給我們預覽代碼定義用的臨時組建檔案,並不是可執源碼,這樣的檔案在項目中是不能正常執行的,因為它與我們的程式原檔案已經相差太多。
GO To Definition的背後操作【VS2015 C#】