首頁 >後端開發 >C++ >C# 介面不允許建構函式簽名,如何在物件實例化過程中存取資源?

C# 介面不允許建構函式簽名,如何在物件實例化過程中存取資源?

Patricia Arquette
Patricia Arquette原創
2025-01-05 09:58:12226瀏覽

How Can I Access Resources During Object Instantiation When Interfaces Don't Allow Constructor Signatures in C#?

在介面中宣告建構函式簽章

在 C# 中,介面可以定義方法的簽名,但不能包含建構子。這帶來了獨特的挑戰,特別是在您希望在物件實例化期間存取某些屬性或資源的情況下。

替代方法:

  1. IObservable 模式:

    IObservable 模式:

    1. 如果您的可繪製對象需要訪問對於圖形設備管理器,請考慮實作IObservable 模式。圖形設備管理器可以訂閱可繪製物件的事件,從而實現所需的更新和繪圖功能。
    建構函式中的物件初始化:

  2. 基底類別中的建構函式可以初始化圖形裝置管理員並將其傳遞給衍生類別的構造函數。這種方法確保衍生類別可以存取必要的資源,而不會違反介面的簽章。

    靜態介面(未來概念):

As在引用的部落格文章中提到,靜態介面可以透過定義僅用於靜態通用約束的建構函式簽章來解決此問題。但是,目前在 C# 中尚不支援此功能。

介面中建構函式定義的意思:

在介面中定義建構子會在類別推導中帶來挑戰。衍生類別將繼承介面的建構函數,可能導致簽章不相容和程式碼損壞。
public interface IParameterlessConstructor
{
    public IParameterlessConstructor();
}

例如,如果介面定義了無參數建構子:

public class Foo : IParameterlessConstructor
{
    public Foo() // As per the interface
    {
    }
}

並且基類實現了它:

public class Bar : Foo
{
    // Yikes! We now don't have a parameterless constructor...
    public Bar(int x)
    {
    }
}

衍生類別將無法使用以下方式定義自己的建構子參數:

最終,雖然建構子無法在介面中明確定義,但可以採用各種變通方法和設計模式來實現所需的功能,而不會影響介面的目的。

以上是C# 介面不允許建構函式簽名,如何在物件實例化過程中存取資源?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn