2016-05-05 1 views
0

У меня есть четыре класса:Используя имя интерфейса в членах интерфейса C#

Author.cs класс т.е.

public class Author : Interfaces.INode 
{ 
     public int _aID { get; set; } 
     public string _aName { get; set; } 
     public List<CoAuthor> _aCoAuthors { get; set; } 
     public List<Venue> _aVenue { get; set; } 
     public List<Paper> _aPapers { get; set; } 

     public string _aArea { get; set; } 
} 

CoAuthor.cs класс т.е.

public class CoAuthor : Interfaces.INode 
{ 
     public int _coaID { get; set; } 
     public string _coaName { get; set; } 
     public List<Paper> _coaPapers { get; set; } 

     public string _coaArea { get; set; } 
} 

Venue.cs класс т.е.

public class Venue : Interfaces.INode 
{ 
    public int _vID { get; set; } 
    public string _vName { get; set; } 
    public List<Paper> _vPapers { get; set; } 

    public string _vArea { get; set; } 
} 

Paper.cs класс т.е.

public class Paper : Interfaces.INode 
{ 
    public int _pID { get; set; } 
    public Author _pAuthor { get; set; } 
    public List<CoAuthor> _pCoAuthors { get; set; } 
    public Venue _pVenue { get; set; } 
    public int _pYear { get; set; } 
    public string _pRField { get; set; } 
} 

Все эти классы реализации interface т.е. Interfaces.INode, который определяется как:

public interface INode 
{ 
     List<INode> _TargetObject { get; } 
     List<INode> _AttributeObject { get; } 
} 

Теперь Author.cs класс типа _TargetObject т.е. определенной в INode и все другие 3 класса относятся к типу _AttributeObject, т.е. определены в INode.

Как я могу связать эти классы с соответствующими INode членов, как в настоящее время его не ясно, что которые _TargetObject и _AttributeObject?

+0

Вы должны быть в состоянии проверить тип и нанести его. –

+0

@ AllanS.Hansen Как это кастинг будет реализован? Будет ли это в классах или в определениях 'interface'? – maliks

+1

Какова цель использования имени 'interface' i.e.' INode' в элементах как 'List '? – maliks

ответ

0

Как поясняется в комментарии, я предлагаю вам определить лучшие объекты и наконечники. В этой реализации вы больше контролируете, какие типы являются Target и каковы атрибуты

public interface INode 
{ 
     List<INode> _TargetObject { get; } 
     List<IAttribute> _AttributeObject { get; } 
} 

public interface IAttribute : INode 
{ 

} 

public class Author : Interfaces.INode 
{ 
    private List<INode> _targetList ; 
    private List<IAttribute> _attributeObject ; 
    public Author() 
    { 
     _targetList = new List<INode>(); 
    } 
    //implementazion of _TargetObject INode method 
    public List<INode> _TargetObject 
    { 
     get 
     { 
      return _targetList; 
     } 
    } 
    //implementazion of _AttributeObject INode method 
    public List<IAttribute> _AttributeObject 
    { 
     get 
     { 
      return _attributeObject ; 
     } 
    } 

} 

public class CoAuthor : Interfaces.IAttribute 
{... your class implementation ...} 
public class Venue : Interfaces.IAttribute 
{... your class implementation ...} 
public class Paper : Interfaces.IAttribute 
{... your class implementation ...} 
+0

Затем, что разместить внутри интерфейса «открытый интерфейс IAttribute: INode»? – maliks

+0

На самом деле вы пытаетесь выделить объекты Target и Attribute? Принимая во внимание, что оба являются узлами одного и того же графа, так будет ли что-то не так в отношении точки зрения реализации, поскольку мы должны реализовать график здесь – maliks

+0

Как мы будем реализовывать списки членов интерфейса в классах? – maliks

Смежные вопросы