簡體   English   中英

C# 為什么我可以通過屬性訪問非 static 類的方法和屬性,而無需先創建該 class 的實例?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM