![](/img/trans.png)
[英]Inheriting an interface from a base abstract class and IDisposable's correct place
[英]Hiding methods from other classes when inheriting from a class and Interface or Abstract class
為了改進進一步的實現並提供一些指導並在項目中使所有內容盡可能通用,我創建了一個接口,其中包含一些應使用的方法。 但是,調用該類的用戶只能看到該類的一種方法,因此我希望它們屬於受保護的種類。 例如
public class ClassThree
{
public ClassThree()
{
var classOne = new ClassOne();
class1.MethodOne();
}
}
盡管ClassOne具有4種方法,但3種方法僅在一個公共類中使用,因此是私有的或受保護的。 這三種方法才能使第四種方法起作用(在理想情況下,其他開發人員將遵循相同的原理)。 所以我不想在智能感知中看到以下內容:
class1.MethodTwo();
class1.MethodThree();
class1.MethodFour();
我知道可以從接口隱式調用方法,例如
IInterface.MethodTwo<Type,Type>(string name)
{
//Do stuff here
}
但是,我想避免在ClassOne本身中調用上述方法時進行所有強制轉換,因為這只是我的眼中釘。 我喜歡干凈的代碼,這對我來說根本不是干凈的。 我想到了一個抽象類,但是我的類是從另一個類繼承的。 使用界面,我可以做
public ClassOne : ClassTwo, IInterface<Type1,Type2>
但是,當我使用Abstract類進行此操作時,Visual Studio會提示需要一個接口。 我希望通過使自己和必須使用我的代碼的其他開發人員的生活更輕松地完成自己的代碼來增添我的代碼,因此最歡迎和贊賞任何見解。
提前致謝!
編輯:該方案可以有多個類,例如ClassOne,它們本質上是相同的,但是它們使用不同的類型,因為它們必須返回的對象具有不同的值。 但是,這些對象的構建大致相同,例如:
想法總是相同的,但是自然地,不同的API將需要不同的變量。 但是要確保像我想實現一個接口一樣執行所有步驟,但是步驟1,2和3應該是私有的或受保護的,並且只有第2步可供使用它的類使用。 但是,如果僅將方法2放在接口中,則我永遠無法確定其他人將實現1,3&4。這就是這里的目標:P。 而ClassOne也從另一個類繼承而不僅僅是接口。
編輯2:我知道接口只提供公共方法,這就是為什么我要尋找替代品,因此是這個問題。 我知道它有什么問題,我只是真的不知道如何以自己希望的方式獲得它。 感謝到目前為止的答復!
編輯3:接口當前看起來像這樣,為了示例,我只是調整了變量名。
public interface IExport<in T, in TU>
{
void GetRequiredApiData();
bool MethodOne(List<Type> list);
bool ExportOne(T one);
bool ExportTwo(TU two);
bool ValidateExport();
}
其他三個方法應該只在公共方法內調用,或者將第一個方法設為私有/受保護,並在一個公共方法內調用全部4個方法。
接口的全部目的是完全隱藏對您有問題的東西-調用者不需要知道的其他三種方法。
我懷疑您需要在特定的特定時間按特定順序調用這三種方法。 如果真是這樣,那么您就有代碼味了。 這些方法可能只是具有副作用並更改全局狀態的void子例程。 需要將代碼重構為不僅僅是一系列子例程,並且需要以不同的方式分解對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.