簡體   English   中英

具有泛型類聲明的命名空間約束

[英]Namespace constraint with generic class declaration

我想知道是否(如果是這樣的話)可以將命名空間定義為泛型類聲明中的約束參數。

我有的是這個:

namespace MyProject.Models.Entities < - 包含要在db中保留的類

namespace MyProject.Tests.BaseTest < - 我覺得很明顯

現在我的'BaseTest'類的變化看起來像這樣;

public class BaseTest<T>

BaseTest (在編寫本文時)執行的操作比刪除測試期間添加到數據庫的所有實體要多得多。 所以通常我會將測試類聲明為:

public class MyEntityRepositoryTest : BaseTest<MyEntity>

我想要做的是類似於以下內容:

public class BaseTest<T> where T : <is of the MyProject.Models.Entities namespace>

現在我知道完全可以簡單地聲明一個'BaseEntity'類, MyProject.Models.Entities命名空間中創建的所有實體都將從該類繼承;

public class BaseTest<T> where T : MyBaseEntity

但是......我實際上並不需要或想要。 另外,我使用ORM和帶有繼承的映射實體,雖然可能,但增加了一層不需要的復雜性。

那么,是否可以將泛型類參數約束到命名空間而不是特定類型?

無法為命名空間創建任何此類約束。

更優選的解決方法是使您的泛型類internal而不是public 這意味着該類只能由同一程序集中的類直接實例化和訪問(除非您使用InternalsVisibleTo屬性)。 但是,它仍然可以間接實例化(即作為公共類的受保護/私有成員)。

命名空間約束沒有價值。 任何第三方都可以創建一個類並將該類放入同一個名稱空間。

編譯器不會為您執行此檢查。 您可以在運行時驗證此約束,可能在您的類型的靜態構造函數中。

暫無
暫無

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

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