我想知道如果我需要公开数据接口但想要在扩展的计算属性中使用它们,那么该怎么走。为了更清楚: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