簡體   English   中英

靜態與公共C#

[英]Static vs. public C#

我知道在SO上已經多次回答了這個問題,但我仍然沒有弄清楚實例化類的確切含義。 我讀了這篇文章 ,這確實有助於我理解。

我知道像Console這樣的靜態類不能像Console c = new Console()這樣的new表達式一起使用,因為該類中沒有任何實例變量。 我也知道靜態類提供'泛型'方法,通常用於Math函數。 我知道一旦你實例化了一個像Double d = new Double(); 您現在可以訪問Double類中的任何方法。

我知道這些事實,但我覺得我真的不明白他們實際上是什么意思。 有人可以給出一個靜態類絕對必要的例子,以及創建類的實例是絕對必要的嗎?

想象一個類似一組藍圖的類。 實例化類就像獲取藍圖並構建項目一樣。 當工程師設計汽車時,他提出了設計。 那將是班級。 汽車設計完成后,計划將被移交到要建造的裝配線上。 每輛下線的汽車都是該設計的一個實例。

當汽車還只是一個設計時,你無法用它做任何事情。 如果沒有車,你就無法開門。 一旦擁有了汽車的實例,就可以操縱它。 你可以打開車門,啟動發動機等。像Double 擁有實例后,您可以對其進行操作。

靜態類(如Console )是沒有實例的類。 它們更像是一種分組有用的相關功能的方法。 Console的情況下,該功能用於與命令行交互。 Math用於分組與數學相關的代碼。 Configuration用於讀取/操作配置文件。 這些都不需要您創建任何獨特的工作。

必須在另一個類的應用程序中調用公共類,例如,這可能是一類數據訪問(由businnes層調用)。

靜態類不一定需要創建實例,例如跟蹤或記錄類。

考慮靜態的一個(可能結束)簡化示例如下:

如果你有班級狗; 你可以實例化這個類來創建Dog Poodle = new Dog(); 和狗拉布拉多=新狗(); 如果Dog類有一個變量hairColor,那么對於Poodle和Labrador,hairColor可能會有所不同。 兩個不同的實例是分開的。

但是,如果您向Dog添加了一個名為numberOfDogs的靜態變量,並且每次實例化一個新Dog時都會增加該變量(例如,您可以這樣做構造函數),那么該變量將計算Dogs的總數,並且將是無論您檢查哪個Dog實例,都是相同的數字。 根據您的使用方式,這很有用(也很危險)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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