J'ai un objet "ConnectableProperty" qui relie une propriété à une autre, et nécessite que je l'alimente Func. Maintenant, j'ai 2 types en ce moment - Scalaire et Couleur. Les deux sont transposables les uns aux autres via des opérateurs explicites. Pour une raison quelconque, je ne peux pas envoyer un Func<double, double, Scalar>
à Func<double, double Color>
, même si Scalar peut utiliser la couleur. Quel est le problème?Méthode anonyme de retour de type casting
Pour clarifier, j'ai ajouté le code. Notez que les propriétés connectables sont les "entrées". Les sorties (qui peuvent être branchées) sont des méthodes qui ont cette signature.
Voilà 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;
}
}
Et 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;
}
}
Pouvez-vous donner un exemple de la façon dont vous le faites en ce moment? –
Pouvez-vous poster vos objets? Si la distribution n'est possible que explicitement, je ne vois pas comment le Func peut fonctionner. – IndigoDelta
peut-être s'il y avait une sorte d'héritage, ou une implémentation d'interface, vous pourriez alimenter la fonction scalaire à la couleur, mais pas comme ça – Atzoya