c#中相同值的多个访问器

时间:2012-04-10 16:43:54

标签: c# .net-4.0 accessor

我有一个简单的场景,我根据AnotherTest值得Test值。这大部分时间都可以正常工作,这样每当我提供Test时,我肯定会轻易获得AnotherTest

public sealed class Transaction {
    public string Test { get;set; }
    public string AnotherTest{
        get {
            int indexLiteryS = Test.IndexOf("S");
            return Test.Substring(indexLiteryS, 4);
        }
    }
}

但是,我希望能够set AnotherTest值,并且无需提供Test值即可阅读。这可能吗?所以有两种类型get基于它的设置方式。我知道我可以创建3rdTest但我有一些使用AnotherTest和其他字段的方法,我将不得不编写那些方法的重载。

编辑:

我读了银行提供的一些文件。我把它切成碎片,把一些东西放在Test值中,并且Transaction的每个其他字段(AnotherTest和类似的东西)都会自动填充。 但是后来我想从SQL中读取已经处于良好格式的事务,因此我不需要提供Test来获取其余的字段。我想使用set设置这些字段,然后在不设置get值的情况下使用Test

3 个答案:

答案 0 :(得分:4)

是的,就像这样:

public string Test { get; set; }

public string AnotherTest
{
   get
   {
      if(_anotherTest != null || Test == null)
         return _anotherTest;

      int indexLiteryS = Test.IndexOf("S")
      return Test.Substring(indexLiteryS, 4);
   }
   set { _anotherTest = value; }
}
private string _anotherTest;

getter也可以表示为

return (_anotherTest != null || Test == null)
    ? _anotherTest
    : Test.Substring(Test.IndexOf("S"), 4);

答案 1 :(得分:1)

我认为这会做你想做的事情:

public sealed class Transaction {
    public string Test { get;set; }
    public string AnotherTest{
        get {
            if (_anotherTest != null)
            {
                return _anotherTest;
            }
            else
            {
                int indexLiteryS = Test.IndexOf("S");
                return Test.Substring(indexLiteryS, 4);
            }
        }
        set {
            _anotherTest = value;
        }
    }
    private string _anotherTest = null;
}

答案 2 :(得分:0)

我建议把问题转过来。

听起来你正在处理其中的大字段和子字段。相反,如何将这些子字段推广到字段并在访问时构建/解构大字段。