C#使用属性区分传入对象

时间:2016-02-08 13:53:05

标签: c#

我需要一种区分用户传递到自定义控件的类对象的方法。这样做的原因是,我可以处理后端的某些逻辑,完全被用户提取和无法控制。用户可以像这样传递对象集合......

<Grid>
    <nexus:NexusEditor 
        SourceTeams="{Binding Teams}"
        SourcePlayers="{Binding Players}"
        SourceLocations="{Binding Locations}"/>
</Grid>

如果我要在我的自定义控件中浏览所有这些对象,我需要一种标记传入对象的方法,以便我知道哪些已经通过。

2 个答案:

答案 0 :(得分:0)

这在运行时不容易完成,可以说是C#中的错误设计。还有其他方法可以解决这个问题。例如,您可以围绕Connection类创建一个包装器,并将Connection的实例注入其中。然后ConnectionWrapper可以继承AbstractBase

public class ConnectionWrapper: AbstractBase
{
   public ConnectionWrapper(Connection connnection)
   {

   }

   private override int _type {get; set;}
}

答案 1 :(得分:0)

在不了解更多关于你的要求的情况下给出具体的东西真的很难,但我认为这样的事情可能会做你想要的:

public interface ITyped
{
    int Type { get; }
}

public class Connection : ITyped
{
    public string Name { get; set; } // NOTE: public setters are Bad Code(tm) for anything but the dumbest DTO objects

    public int Type { get { return 1; } } // specify type for connections here
}

用法:

foreach (var typed in connections.Concat<ITyped>(groups))
{
    DoStuffWith(typed);
}