我想知道如果我需要公開數據接口但想要在擴展的計算屬性中使用它們,那麼該怎麼走。爲了更清楚:C#:關於接口,實現和繼承的困惑
// The public interface
public interface IData
{
int Property { get; }
}
// The internal interface
internal interface IExtendedData : IData
{
int ExtendedProperty { get; }
}
// The assumed implementation of someone using my interface
public class Data : IData
{
public Data(int a)
{
Property = a;
}
public int Property
{
get;
private set;
}
public override string ToString()
{
return Property.ToString();
}
}
// My implementation
internal class ExtendedData : IExtendedData
{
public ExtendedData(int a)
{
Property = a;
}
public int Property
{
get;
private set;
}
public int ExtendedProperty
{
get
{
return 2 * Property;
}
}
public override string ToString()
{
return Property.ToString() + ExtendedProperty.ToString();
}
}
// publicated by me, for the person who uses my dll
public static class Calculations
{
public static int DoSomeCalculation(IData data, int parameter)
{
// This probably don't work, but maybe shows what I want to do
IExtendedData tempData = (ExtendedData)data;
return tempData.ExtendedProperty * parameter;
}
}
我真的感到沮喪,因爲我覺得自己缺少一些basical編程技巧。
使用您的dll的人將無法訪問IExtendedData和ExtendData,因爲它們被聲明爲您的程序集/ dll的內部。 – 2012-03-27 08:20:26
如果'Calculations'是在與'IExtendedData'和'ExtendedData'內部相同的程序集中聲明的,那麼這將工作正常。 :) – Richard 2012-03-27 08:25:02
當然。這個人只會自己實現IData接口。在我的例子中,他的實現將是「數據」類。他只會調用靜態的DoSomething方法並傳遞他的「數據」對象。但由於某些複雜性,我需要擴展屬性。我希望這更清楚。 – germanSharper 2012-03-27 08:28:54