C#:关于接口、实现和继承的困惑
本文关键字:实现 继承 于接口 接口 | 更新日期: 2023-09-27 18:29:17
如果我需要公开数据接口,但又想在内部使用扩展的计算属性,我想知道该怎么办。为了更清楚:
// 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;
}
}
我真的很沮丧,因为我觉得错过了一些基本的编程技能。
您可以通过将ExtendedData实现为实现IData 的类的包装器来解决此问题
internal class ExtendedData : IExtendedData
{
private IData data;
public ExtendedData(IData data)
{
this.data = data;
}
public int Property
{
get { return data.Property; }
private set { data.Property = value; }
}
public int ExtendedProperty
{
get
{
return 2 * Property;
}
}
}
并将其用于类似的CCD_ 1
IExtendedData tempData = new ExtendedData(data);
ExtendedData可以从Data:继承
class ExtendedData : Data
{...}
为了创建Data
对象,您添加了一个工厂,如下所示:
public class DataFactory
{
public IData CreateData()
{
return new ExtendedData();
}
}
用户必须通过该工厂创建其所有数据对象。您可以通过将Data的构造函数设置为内部构造函数来确保这一点
在DLL中,您可以转换为ExtendedData
。