代码之家  ›  专栏  ›  技术社区  ›  angularconsulting.au

C根据其他属性值自动分配属性

  •  18
  • angularconsulting.au  · 技术社区  · 15 年前

    如果我有一些类型,例如:

    public class SomeType //Generated by some codegen i won't to change that.
    {
        string C { get; set; }        
    }
    
    public class AnotherType : SomeType
    {
        string A { get; set; }
        string B { get; set; }
    }
    

    是否可以自动分配属性C?例如,当属性A和B被分配时,或者当我将此类型强制转换为其他类型时,或者以其他方式?

    基本上,例如,我想执行一些逻辑,以便在填充属性值A和B时,根据值A和B自动分配属性C。

    有没有其他方法可以做到这一点而不是使用标准属性?

    我在想,当我可以将类型另一个类型强制转换为某个类型时,有可能实现一些神奇之王,但是我不能实现隐式运算符,我可以将此转换逻辑“从A+B转换为C”,因为编译器不允许对相关类型使用隐式运算符。

    现在我看到的唯一方法是移除继承并为另一个类型到某个类型的转换实现隐式运算符,但在这种情况下,我需要在另一个类型中复制类型someType的所有属性,并且每次更改某个类型时,我需要手动更改类型anotherType。

    3 回复  |  直到 9 年前
        1
  •  21
  •   Darin Dimitrov    15 年前

    这可以使用自动实现的属性。可以使用b的setter为c赋值:

    public class SomeType
    {
        public string A { get; set; }
        public string C { get; set; }
    
        private string _b;
        public string B 
        { 
            get { return _b; } 
            set 
            { 
                // Set B to some new value
                _b = value; 
    
                // Assign C
                C = string.Format("B has been set to {0}", value);
            }
        }
    }
    
        2
  •  6
  •   GregNash    12 年前

    你想设置C,还是直接得到它?如果您不需要设置该值,那么我认为您需要:

    public class MyClass
    {
        private string _a = "not set";
        private string _b = "not set";
    
        public string A
        {
            get { return _a; }
            set { _a = value; }
        }
    
        public string B
        {
            get { return _b; }
            set { _b = value; }
        }
    
        public string C
        {
            get
            {
                if (_a != "not set" && _b != "not set")
                    return "not set";
                else
                    return "set";
            }
        }
    }
    

    以下是访问依赖于另一个属性的属性的简单示例:

    public class MyClass
    {
        private double[] MyArray = new double[5];
    
        public int NumElements
        {
            get
            {
                return MyArray.Length;
            }
        }
    }
    
        3
  •  5
  •   Paul Hadfield    15 年前

    我不知道,你必须使用以下BOG标准属性(如果你只知道自动属性)

    public class SomeType
    {
        string _A;
        string _B;
        string _C;
    
        public string A { get{return _A;}  set{ _A = value; _C = _A + _B; } }
        public string B { get{return _B;} set{ _B = value; _C = _A + _B; }
        public string C { get{return _C}; }
    }
    
    推荐文章