我有两个类,Sensor
和Channel
。通过在通道中“插入”传感器来使用它们(即,使用Sensor
实例将Channel
的属性设置为Sensor
)。然后,当你调用AddSamples
在Channel
与非空传感器的Sensor.WhenNewSamples
用户会被告知:使方法只能访问其他类
public abstract class Channel
{
public Sensor Sensor { get; set; }
public abstract void AddSamples(IEnumerable<double> samples)
}
public abstract class Sensor
{
public abstract IObservable<double> WhenNewSamples { get; }
internal abstract void AddSamples(IEnumerable<double> samples);
}
我想达成什么是内部传递这些样品的方式,而无需创建一个暴露Sensor.AddSamples
。另外,当然,它应该与其他程序集中定义的子类一起工作,因为Sensor
和Channel
是抽象的,并且在域模型库中进行了定义。
UPDATE:
下执行就可以了,但它并不能编译,因为Sensor.AddSamples
是内部和派生类在其他组件:
public class ConcreteChannel : Channel
{
public override void AddSamples(IEnumerable<double> samples)
{
// AddSamples below is inaccessible
Sensor.AddSamples(samples);
}
}
public class ConcreteSensor : Sensor
{
Subject<double> _subject = new Subject<double>();
public override IObservable<double> WhenNewSamples
{
get { return _subject.AsObservable(); }
}
// "No suitable method found to override"
internal override void AddSamples(IEnumerable<double> samples)
{
samples.ToList().ForEach(s => _subject.OnNext(s));
}
}
使'AddSamples'受保护?然后它只能派生类才可见。或者我明白你是谁? – HimBromBeere
@HimBromBeere我想'Channel.AddSamples'是公开的,但我不知道如何封装数据从'Channel'传递到'Channel.Sensor'而不创建一个公共的'Sensor.AddSamples',我会喜欢避免。我正在寻找一种“魔术隧道”,我只能在一个类中添加样本,并且它会在另一个类中弹出,前提是它们彼此“连接”(即Channel.Sensor属性被设置为“Sensor”的一个实例)。查看我的更新。 – heltonbiker
如果您需要从课堂和大会以外的成员访问,那么它应该是“公开”的。没有办法绕过这个。 – HimBromBeere