在 C# 中的介面中實現屬性
今天,我們將學習如何在 C# 中的介面中實現屬性。
C# 中的介面可以有許多不同的屬性,以及指定我們應該如何在其中宣告屬性可用性的訪問修飾符。該介面通常充當不同成員和物件的預設實現。
讓我們開始看看我們可以在介面中實現屬性的各種方式。
使用簡單程式碼塊在介面中設定屬性
假設我們在 C# 中建立了一個名為 ENGINE
的介面,並帶有 TORQUE
屬性。我們將設定介面 ENGINE
如下:
public interface ENGINE
{
int torque { get; set; }
}
因此,我們為它的屬性建立了一個具有適當的 getter 和 setter 的介面,稱為 TORQUE
。要使用該介面,我們必須繼續定義一個可以實現該介面的類。
假設我們要定義一個包含 ENGINE
的 CAR
類。因此我們可以這樣寫:
class CAR : ENGINE
{
public int torque { get; set; }
}
請注意,在從此類建立物件時,CAR
類包含公共使用的 TORQUE
實現。要使用 CAR
物件,只需如下呼叫:
CAR x = new CAR();
x.torque = 989;
Console.WriteLine(x.torque);
因此,你可以使用不同的屬性並將它們包含在介面中以供以後使用。這提供了更好的抽象層,並允許在不更改主要方法或類的情況下進行修改。
因此,如果我們想為 ENGINE
新增一個名為 LABEL
的新屬性,我們可以在介面 ENGINE
中設定它,該介面可以在類 CAR
中使用。
整個程式碼如下所示:
using System;
namespace CA_ONE
{
class Program
{
public interface ENGINE
{
int torque { get; set; }
}
class CAR : ENGINE
{
public int torque { get; set; }
}
static void Main(string[] args)
{
CAR x = new CAR();
x.torque = 989;
Console.WriteLine(x.torque);
}
}
}
我們已將我們的專案命名為 CA_ONE
;因此名稱空間擴充套件並實現它。這裡要注意的另一件事是,CAR
中 TORQUE
的實現可以在其函式內部有其他定義,例如 PRINT
方法或扭矩轉換等。
在 C# 中對介面中的屬性進行修改
在上面提供的解決方案中,我們提到了如何在我們的實現中定義其他方法。假設我們想擴充套件介面 ENGINE
中預設定義的 GET
和 SET
方法。
我們將保持 ENGINE
不變,但傾向於修改擴充套件它的 CAR
類中的程式碼。
在 CAR
中,當我們設定 TORQUE
時,我們可能還想列印 "Torque is Set to _value_"
以便我們的使用者知道 TORQUE
屬性是否已正確設定。
因此,我們可以繼續執行以下操作:
class CAR : ENGINE
{
private int torque_priv;
public int torque
{
get
{
return this.torque_priv;
}
set
{
this.torque_priv = value;
Console.WriteLine("This torque has been set to " + torque_priv);
}
}
}
現在在這裡,讓我們關注程式碼中發生的事情。我們注意到的第一件事是使用另一個名為 TORQUE_PRIV
的變數。
我們已經例項化了它,因為我們需要儲存在以下程式碼中傳遞的 TORQUE
值:
x.torque = 989;
如果不是這樣,你不使用 TORQUE_PRIV
變數,程式碼將陷入迴圈,遞迴移動以將值分配給 TORQUE
屬性。另外,我們在這裡使用了一種叫做 VALUE
的東西。
請注意,VALUE
不是變數,而是 C# 中的上下文關鍵字。VALUE
用於屬性和訪問宣告的集合索引器中。
它獲取客戶端分配的值並將其分配給類的私有變數。通過這種方式,你可以修改和使用你的宣告。
很多人會在 TORQUE
的 setter 中使用以下程式碼來表示抽象 CAR
。
this.torque_priv = torque;
對於 GETTER:
return torque;
由於陷入遞迴迴圈,這將出現如下錯誤:
Stack overflow.
在介面中實現任何屬性的一般語法如下:
type name {
get;
set;
}
因為多個類可以繼承和使用介面,所以在抽象類中擴充套件和修改屬性會更好。在實現不同的方法時,介面可以作為骨幹結構,並提供關於什麼和什麼不擴充套件的基本概念。
請記住,介面不能直接使用。他們需要在執行程式碼時初始化和使用抽象類。
介面中的方法始終是公共的,不需要任何隱式訪問修飾符。此外,介面可以從其他介面繼承。
如果你試圖在一個介面中實現一個屬性,而另一個介面繼承了之前定義的那個,你可以使用一個類來擴充套件後一個介面。
假設我們有一個介面 ENGINE
,它繼承 BOLTS
,然後被類 CAR
繼承。我們想根據每個 CAR
的螺栓尺寸安裝一個扳手尺寸的應急套件。
因此,我們可以使用如下實現:
public interface BOLT
{
int size { get; set; }
}
public interface ENGINE : BOLT
{
int torque { get; set; }
然後在類 CAR
中擴充套件 BOLT
如下:
public int size
{
get
{
return wrench_size;
}
set
{
//set the wrench size
wrench_size = value;
Console.WriteLine("The wrench size to use should be: " + wrench_size);
}
}
所以你可以看到任何介面都是繼承的。如果在基介面中設定屬性,則需要在擴充套件基介面或派生介面的所有類中實現該屬性。
因此有必要擴充套件定義。
在抽象類中實現具有多個介面繼承的屬性
假設我們有兩個介面:ENGINE
和 WHEEL
。它們都包含一個啟動方法,告訴我們 ENGINE
或 WHEEL
是否已啟動。
讓我們定義一個啟動方法。
public interface WHEEL
{
void print();
}
public interface ENGINE : BOLT
{
int torque { get; set; }
void print();
}
要在 CAR
類中擴充套件它,你需要編寫一些函式,如下所示:
void WHEEL.print()
{
Console.WriteLine("Wheel has been started");
}
void ENGINE.print()
{
Console.WriteLine("Engine has been started!");
}
要呼叫它們,請在 main 中編寫如下內容:
((WHEEL)x).print();
這是為了指定要使用 print()
方法的介面。
訪問本教程中使用的完整程式碼於此處。
まとめ
這就是如何在介面中使用屬性的全部內容。可能有不同的情況下我們需要設定和使用一個屬性; 因此,最好研究上述所有情況。
Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!
GitHub