通过方法而不是直接公开属性

Man*_*hra 2 c#

我有一个非常简单的要求

public class A
{
   public int Index{get;set;}

   public B ConfigOne{get;set;}
   public B ConfigTwo{get;set;}

  public void SetConfigOne(string val1, string val2);
  public void SetConfigTwo(string val1, string val2);
}

public class B
{
   public string Val1{get;set;}
   public string Val2{get;set;}
}
Run Code Online (Sandbox Code Playgroud)

我如何安排我的两堂课,以便我能够做到这一点:

  var a = A.ConfigOne.Val1;
Run Code Online (Sandbox Code Playgroud)

但不是

A.ConfigOne.Val1 = a;
Run Code Online (Sandbox Code Playgroud)

所以基本上我想让我的间接类(B)属性只读,仍然可以在类A中设置。我想通过一个方法公开setter。我怎么做?

Ser*_*rvy 5

创建一个接口,仅公开可实现的数据的只读视图B。这意味着任何直接引用该B对象的人都可以设置其数据,但从其中的属性访问时A将是只读的:

public interface IReadValues
{
    string Val1 { get; }
    string Val2 { get; }
}

public class A
{
    public int Index { get; set; }

    public IReadValues ConfigOne { get; set; }
    public IReadValues ConfigTwo { get; set; }

    public void SetConfigOne(string val1, string val2);
    public void SetConfigTwo(string val1, string val2);
}

public class B : IReadValues
{
    public string Val1 { get; set; }
    public string Val2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

通过不使用自动属性,而是使用通过显式属性公开的A类型字段,您可以确保该类也可以修改这些对象。BA