簡體   English   中英

初始化和 scope 通用抽象 class

[英]Initialize and scope a generic abstract class

我有以下代碼

            var dataCollection;
            if (ViewBag.WageType.ToLower() == "perm")
            {
                dataCollection = ViewBag.PermWageIndex;
            }
            else if(ViewBag.WageType.ToLower() == "trial")
            {
                dataCollection = ViewBag.TrialWageIndex;
            }

返回類型可以是AbstractClass<Concrete1>AbstractClass<Concrete2> 我必須在聲明時初始化 var。 但是,這意味着我失去了我想要的 scope。 如何在不依賴 ViewBag 的情況下修改此代碼以允許動態 dataCollections?

解決此問題的唯一方法是提供基礎 class 或由Concrete1Concrete2繼承/實現的接口,以便您可以將dataCollection聲明為AbstractClass<ISomething>

Var 不是動態類型,它在編譯時解決。 因此,您不能在沒有賦值( var x; )的情況下聲明變量,因為編譯器無法推斷類型。

您可以回objectdynamic ,但是如果這樣做,您會失去任何類型安全性。

您也許可以讓AbstractClass<>實現接口IAbstractClass ,然后使其成為通用類型。

這是否有效取決於返回類型需要訪問的成員。 顯然,它不能引用任何泛型類型的成員,但這無論如何都沒有多大意義,因為我假設消費者不應該知道泛型參數是什么。

暫無
暫無

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

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