我有一個對象「ConnectableProperty」,將一個屬性掛鉤到另一個屬性,並要求我給它提供Func。現在我有2種類型 - 標量和顏色。兩者都可以通過明確的操作符相互轉換。由於某些原因,我無法提供Func<double, double, Scalar>
到Func<double, double Color>
,即使標量可以投射到彩色。這是怎麼回事?匿名方法返回類型鑄造
爲了澄清,我添加了代碼。請注意,可連接屬性是「輸入」。輸出(可以插入)是具有該簽名的方法。
這裏的ConnectableProperty
public sealed class ConnectableProperty<T> : IEquatable<T>, IGetXY<T> where T : IValue<T>
{
private T _value;
public T Value { get { return _value; } set { _value = value; } }
public INode ParentNode { get; private set; }
public ValueConnection<T> Connection { get; set; }
public INode ConnectionFrom { get { return !IsConnected ? null : Connection.FromNode; } }
public bool IsConnected { get { return Connection == null; } }
public ConnectableProperty(INode parentNode, T value)
{
ParentNode = parentNode;
_value = value;
}
public T GetXY(double x, double y)
{
return IsConnected
? Connection.FromValue(x, y)
: _value;
}
public void Connect(INode fromNode, Func<double, double, T> getXY)
{
Connection = new ValueConnection<T>(fromNode, ParentNode, getXY, this);
}
public void Disconnect()
{
Connection = null;
}
public bool Equals(T other)
{
return _value.Equals(other);
}
public static implicit operator T(ConnectableProperty<T> connectableProperty)
{
return connectableProperty._value;
}
}
而且ValueConnection:
public class ValueConnection<T>
{
public INode FromNode { get; private set; }
public INode ToNode { get; private set; }
public Func<double, double, T> FromValue { get; private set; }
public ConnectableProperty<T> ToValue { get; private set; }
public ValueConnection(INode fromNode, INode toNode, Func<double, double, T> fromValue, ConnectableProperty<T> toValue)
{
// TODO: Implement INPC type thing
FromNode = fromNode;
ToNode = toNode;
FromValue = fromValue;
ToValue = toValue;
}
}
你能舉個例子嗎?你現在怎麼做? – 2011-06-13 12:13:20
你可以發佈你的對象?如果只能明確表演,那麼我不會看到Func如何工作。 – IndigoDelta 2011-06-13 12:13:45
也許如果有某種類型的繼承,或者接口實現可以將標量func提供給顏色1,但不是這樣的 – Atzoya 2011-06-13 12:16:21