如何构造和更新嵌套类的成员?

时间:2019-04-15 11:41:56

标签: c#

我们正在使用提供api的服务引用来访问具有特定类型的某些函数,因为这些服务引用不再可用,我们正计划使用类似的类来使代码工作

服务参考提供了以下服务类型

SearchService→SearchResponse→字段

我感觉是嵌套类正在尝试构建类似的类。

public class SearchResponse_t
{
    public string FieldName { get; set; }
    public string FieldValue { get; set; }
}

public class SearchResult_t
{
    public SearchResponse_t SearchResponse { get; set; }
}

我是C#的新手

我希望当我创建SearchResult_t的新实例时,SearchResponse_t上也会发生同样的事情,但是似乎没有发生。

2 个答案:

答案 0 :(得分:2)

实例化一个类时,其成员(您未指定默认值)被初始化为default(T),其中T是所讨论的类型。

  • 对于引用类型,default(T)始终为null。类是引用类型。
  • 对于值类型,default(T)将提供其默认值。对于数字类型,这是0,等等。

因此,要解决您的特定问题:构建SearchResponse后,我希望nullSearchResult_t。如果您希望它包含SearchResponse_t的新实例,则可以指示它默认执行以下操作:

public class SearchResult_t
{
    public SearchResponse_t SearchResponse { get; set; } = new SearchResponse_t();
}

或者您可以添加一个构造函数并在那里进行初始化:

public class SearchResult_t
{
    public SearchResponse_t SearchResponse { get; set; }

    public SearchResult_t()
    {
        this.SearchResponse = new SearchResponse_t();
    }
}

或者,您可以在实例化类之后执行此操作:

SearchResult_t result = new SearchResult_t();
result.SearchResponse = new SearchResponse_t();

要满足您对SearchResponse也将使用新实例进行填充的期望,请考虑以下示例:

public class Node<T>
{
    public Node<T> Previous { get; set; }
    public Node<T> Next { get; set; }
    public T Item { get; set; }
}

在此示例中,Node<T>将自身引用为PreviousNext值。如果.NET也要实例化它们,则将有一个无限循环。我想,这不是事情如此工作的唯一原因,但这是为什么事情行不通的一个很好的例子。

答案 1 :(得分:0)

我相信这就是您想要的。

public class SearchResult_t
{
    private SearchResponse_t _searchResponse = new SearchResponse_t(); 

    public SearchResponse_t SearchResponse
    {
        get { return this._searchResponse; }
        set { this._searchResponse = value; }
    }
}