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

C# 巢狀類別與實例成員區別:為何 a.B1 不出現在智慧提示中

     編輯:程式設計綜合問答

代碼片段:

public class TestA {
    public class B1 { public decimal C { get; set; } ... }
    public class B2 { public decimal C { get; set; } ... }
}

實例化 TestA a = new TestA(); 後,輸入 a. 智慧提示未顯示 B1、B2。

根本原因

B1、B2 是 巢狀型別,而非 TestA 的實例欄位/屬性。巢狀類別屬於外部類別的型別命名空間,必須透過 TestA.B1 存取,而非實例 a。

正確用法

// 1. 建立巢狀類別實例(不需外部實例)
TestA.B1 b1 = new TestA.B1();
b1.C = 1.23m;

// 2. 若需與外部實例關聯,請在 TestA 定義欄位
public class TestA {
    public B1 Group1 = new B1(); // 實例欄位
    public B2 Group2 = new B2();
    public class B1 { public decimal C { get; set; } ... }
    public class B2 { public decimal C { get; set; } ... }
}
// 現在 a.Group1.C 可在智慧提示中出現

類別層次關係補充

  • 巢狀類別:僅為邏輯分組、封裝,無隱含外部實例參考(除非標記 inner 或在 Java 中為非 static 內部類別)。
  • 組合/聚合:外部類別持有內部類別的實例作為欄位,才形成「擁有」關係,智慧提示才會出現。
  • 繼承:class Child : Parent,子類別實例即父類別實例,屬於「是一種」關係。

建議

若只是為了參數分組傳遞,直接在 TestA 定義 public B1 Group1 { get; set; } 等屬性即可,無需巢狀類別;若巢狀類別需存取外部私有成員,再考慮非 static 內部類別(Java)或傳遞外部實例參考(C#)。

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