![](/img/trans.png)
[英]Why can the C# compiler “see” static properties, but not instance methods, of a class in a DLL that is not referenced?
[英]C# Why can I access a non static class' methods and properties via a property, without creating an instance of that class first?
我對 C# 非常陌生,並且一直在 C# 和 .NET Core 進行一系列基礎培訓課程。 在這些課程中,我不斷被告知,除非 class 是 static,否則我必須通過“new”關鍵字創建 class 的新實例來訪問其屬性和方法。 但是,在一個培訓課程(.NET Core 基礎知識)中,有一個示例沒有解釋,但情況似乎並非如此,我需要幫助來理解原因。
在課程中有兩個課程'Restaurant'和'DetailModel'。 Restaurant class 中的所有方法和屬性都是公共的,Restaurant class 及其屬性和方法不是 static。 在 DetailModel class(位於單獨的 class 文件中)中,創建了一個名為 Restaurant 的新屬性,其類型如下所示:
public Restaurant Restaurant { get; set; }
通過此屬性,我現在可以訪問 Restaurant class 的所有方法和屬性,而無需創建 Restaurant class 的新實例。 我的問題是,當我經常被告知如果不創建該 class 的新實例就無法訪問非靜態類的方法和屬性時,為什么允許我設置具有該 class 類型的屬性然后訪問該類的方法和屬性以這種方式,而無需通過“新關鍵字? 任何幫助將非常感激。
我使用的 .NET Core 框架的版本是 2.2。
請參閱下面兩個簡化類的代碼:
public class Restaurant
{
public int Id { get; set; }
public string Name { get; set; }
public string Location { get; set; }
public CusineType Cuisine { get; set; }
}
public class DetailModel : PageModel
{
public Restaurant Restaurant { get; set; }
public void OnGet()
{
Restaurant.Name = "Test Restaurant";
}
}
您缺少的是,在DetailModel
中有一個Restaurant
類型的屬性,也稱為Restaurant
。 線
Restaurant.Name = "Test Restaurant";
指那個屬性。 為清楚起見,你可以想象一下Restaurant
前面的this
:
this.Restaurant.Name = "Test Restaurant";
將屬性命名為與它們來自的 class 相同的名稱可能會造成混淆,應盡可能避免(這通常發生在類型為Color
且也命名為Color
的顏色屬性中)。
注意:要使名稱設置起作用,該屬性需要在之前的某個地方進行初始化(即您所期望的new Restaurant()
)。
檢查屬性定義:
public Restaurant Restaurant { get; set; }
這是 class 餐廳的實例,也稱為餐廳。
在這一行
Restaurant.Name = "Test Restaurant";
您訪問的不是 class 的屬性,而是實例的屬性。 如果您想看看我在說什么,請將實例重命名為 RestaurantInstance。
Restaurant class 的實際實例將在 DetailModel class 的實例化上創建。 它的默認構造函數會將 Restaurant 創建為 null,而不是 new Restaurant()。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.