我对C#很新,所以要温柔
我的最终目标是为继承提供几种不同类型的类(例如: Level )。这些继承的类做两件事,具有.Value属性,具有不同的setter,具体取决于类,以及.Action方法,对于每个实例都是唯一的,因此它是一个覆盖。
问题:如何从类上的方法设置 .Value 属性。这是代码行(第27行),它不适用于下面的示例。我不明白为什么。
Potentiometer.Value = Convert.ToDouble(data);
// Code taken from https://dotnetfiddle.net/YNJpjf
using System;
namespace Main {
class Program
{
static Device device = new Device();
static void Main(string[] args)
{
device.HandleDataUpdate("50");
}
}
public class Device
{
public class Potentiometer : Level
{
public override void Action()
{
Console.WriteLine("value is at: {0}", this.Value);
}
}
public void HandleDataUpdate(String data)
{
Potentiometer.Value = Convert.ToDouble(data);
}
}
public class Level
{
private Double thisValue;
public Double Value
{
get => thisValue;
set
{
if (thisValue != value)
{
thisValue = value;
Action();
}
}
}
public virtual void Action()
{
}
}
}
答案 0 :(得分:1)
为Level
提供受保护的抽象方法OnSetValue
,强制每个子类覆盖它。现在,Value
的设置者可以在设置值之前调用OnSetValue
:
public class Level {
private double val;
public double Value {
get {
return val;
}
set {
OnSetValue(value);
val = value;
}
}
protected abstract void OnSetValue(double val);
...
}
public class Potentiometer : Level {
protected void OnSetValue(double val) {
...
}
}
答案 1 :(得分:0)
您需要创建一个电位计实例。
答案 2 :(得分:0)
您正在尝试设置类字段的值,这是不可能的,而不是对象的字段。您必须在Potentiometer
中创建Device
的实例,如果您想这样做,您可以创建方法或更改代码逻辑。