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