首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# 匿名對象創建後如何後續使用?正確姿勢在這裡

     編輯:程式設計綜合問答

問題場景

string id = new MyClass().GetId(); // 創建對象並調用方法
// 後續想再次使用這個 new MyClass() 對象,該怎麼辦?

直接回答

無法直接獲取。 沒有變量引用的對象稱為「匿名對象」,語句執行完畢後即不可達,隨後會被 GC 回收。**想後續使用,必須在創建時賦值給變量。**

正確寫法

// 1. 存入變量,隨時可用
MyClass obj = new MyClass();
string id = obj.GetId();
// 後續繼續使用 obj
obj.DoSomething();

// 2. 若僅需鏈式調用一次,可用匿名對象
string id = new MyClass().GetId(); // 用完即丟,無後續需求時適用

為什麼不建議「省變量」?

誤區後果
以為能通過類型反射獲取CLR 不維護「所有已創建實例」的全局列表,無法反射枚舉。
以為能靠 finalize 復活finalize 已棄用,且對象已不可達,無法復活。
覺得變量佔內存引用變量僅 4/8 字節,對象本體在堆上,變量不佔對象內存。

特殊場景:鏈式調用構建器模式

若類設計為 Builder / Fluent API,支持鏈式調用:

// 設計時返回 this
public class MyClass {
    public MyClass SetName(string n) { Name = n; return this; }
    public MyClass SetAge(int a) { Age = a; return this; }
    public string Build() { return $"{Name}-{Age}"; }
}

// 使用時真正「一次語句完成構建並獲取結果」
string result = new MyClass().SetName("Tom").SetAge(18).Build();

總結

  • 需要復用 → 必須存變量。
  • 單次用完即丟 → 匿名對象可接受。
  • 別試圖「事後補救」獲取匿名對象,這在 C# 中不可行。

給對象一個名字(變量),是面向對象編程中最基本的契約。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved