2010-05-06 7 views
1

En utilisant des méthodes d'extension pour C#, comment inclure une méthode AddNode (voir ci-dessous) dans la classe ExtensionMethods pour la réutiliser, par opposition à devoir le mettre dans la classe d'implémentation ne le réutilise pas). La méthode d'extension AddNode doit pouvoir accéder au paramètre List dans l'implémentation. J'ai essayé le ci-dessous mais je trouve dans la méthode d'extension AddNode qu'il ne peut pas "voir" la liste des noeuds, même si cette liste est spécifiée dans l'interface ITopology, et la méthode d'extension est appliquée cette interface ITopology.comment puis-je accéder à un non-statique

Certaines des classes de collections de génériques .net semblent être en mesure de regrouper leurs méthodes "add", alors est-ce que je prends la mauvaise approche ici quelque part?

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; } 
    } 
} 

Répondre

2

Vous accédez topIf, pas this:

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

Remplacez le code dans AddNode ce qui suit:

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

Vous avez oublié d'utiliser la référence topIf pour accéder réellement la propriété Nodes .