我怎样才能访问非静态

时间:2010-05-06 06:59:10

标签: c# .net extension-methods

使用C#的扩展方法,如何在ExtensionMethods类中包含一个AddNode方法(见下文)以供重用,而不必将它放在实现类本身(我无法重用它)。 AddNode扩展方法需要能够访问实现中的List参数。

我已经尝试了以下但是我发现在AddNode扩展方法中它无法“看到”节点列表,即使在ITopology界面中指定了此列表,并且扩展方法正在应用于此ITopology界面。

某些.net泛型集合类似乎能够捆绑他们的“添加”方法,所以我在某处采取了错误的方法吗?

    public interface ITopology
    {
        List<INode> Nodes { get; set; }
    }

    public interface INode 
    {
        List<INode> GetChildren(NodeDepthType nodeDepth);
    }

    public static class ExtensionMethods
    {

        public static bool AddNode(this ITopology topIf, INode node)
        {
            this.Nodes; // <== ** Can't resolve symbol Nodes **
            return true;
        }

    }

namespace TopologyLibrary_Client
{
    using Topology;

    public class TopologyImp : ITopology
    {
        public List<INode> Nodes { get; set; }
    }
}

2 个答案:

答案 0 :(得分:2)

您可以访问topIf,而不是this

    public static bool AddNode(this ITopology topIf, INode node)
    {
        topIf.Nodes;
        return true;
    }

答案 1 :(得分:1)

使用以下内容替换AddNode中的代码:

public static bool AddNode(this ITopology topIf, INode node) 
{ 
    topIf.Nodes; // <== Note the use of topIf here.
    return true; 
} 

您忘记使用参考topIf来实际访问Nodes属性。