Может ли я ссылаться на расширенные методы / слова, не имеющие отбрасывания из объекта базового класса

StackOverflow https://stackoverflow.com/questions/2831036

Вопрос

Неужели не иметь «отливки» The Top.First (). Value () Возвращение в «Узел», а скорее его автоматически предположили это (в отличие от NodeBase), поэтому я вижу расширенные атрибуты для класса I Определите в узле?

То есть есть способ сказать:

top.Nodes.First().Value.Path;

в отличие от сейчас, чтобы пойти:

((Node)top.Nodes.First().Value).Path)

спасибо

[TestMethod()]
public void CreateNoteTest()
{
    var top = new Topology();
    Node node = top.CreateNode("a");
    node.Path = "testpath";

    Assert.AreEqual("testpath", ((Node)top.Nodes.First().Value).Path); // *** HERE ***
}


class Topology : TopologyBase<string, Node, Relationship>
{
}

class Node : NodeBase<string>
{
    public string Path { get; set; }
}


public class NodeBase<T>
{
    public T Key { get; set; }

    public NodeBase()
    {
    }

    public NodeBase(T key)
    {
        Key = key;
    }      


}

public class TopologyBase<TKey, TNode, TRelationship> 
    where TNode : NodeBase<TKey>, new() 
    where TRelationship : RelationshipBase<TKey>, new()

{
    // Properties
    public Dictionary<TKey, NodeBase<TKey>> Nodes { get; private set; }
    public List<RelationshipBase<TKey>> Relationships { get; private set; }



}
Это было полезно?

Решение

В TopologyBase, Измените свой словарь TValue быть TNode скорее, чем NodeBase<TKey>. top.Nodes.First().Value Затем вернется Node В вашем образце кода.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top