как я могу получить доступ к нестатическому - PullRequest
1 голос
/ 06 мая 2010

Используя методы расширения для C #, как включить метод AddNode (см. Ниже) в класс ExtensionMethods для повторного использования, в отличие от необходимости помещать его в сам класс реализации (где я не мог использовать его повторно). Метод расширения AddNode должен иметь доступ к параметру List в реализации.

Я попробовал следующее, однако обнаружил, что в методе расширения AddNode он не может "видеть" список узлов, даже если этот список указан в интерфейсе ITopology, и к нему применяется метод расширения. Интерфейс ITopology.

Кажется, что некоторые классы коллекций .net generics могут связывать свои методы "add", поэтому я где-то здесь ошибочен?

    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 ]

2 голосов
/ 06 мая 2010

У вас есть доступ topIf, а не this:

    public static bool AddNode(this ITopology topIf, INode node)
    {
        topIf.Nodes;
        return true;
    }
1 голос
/ 06 мая 2010

Замените код в AddNode следующим:

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

Вы забыли использовать ссылку topIf для фактического доступа к свойству Nodes.

...