c# - 同一个成员变量的两个setter/getter

标签 c# properties

我在 C# 类中有这样的私有(private)成员变量:

class foo{
    private byte bar;
}

我想像这样制作两个(或更多)setter/getter:

class foo{
    private byte bar;

    public int Bar{
        get{return (int)bar;}
        set{bar=(byte)bar;}
    }    

    public string Bar{
        get{return "Nothing";}
        set{bar=0;}
    }
}

这可能吗?或任何其他等效模式?

最佳答案

从技术上讲,您可以通过隐式运算符模仿这样的行为:

  public struct Bar {
    internal Bar(Byte value) {
      Value = value;
    }

    internal Bar(String value) {
      if (String.Equals(value, "Nothing", StringComparison.OrdinalIgnoreCase))
        Value = 0;
      else
        Value = Byte.Parse(value);
    }

    public Byte Value {
      get;
      private set;
    }

    public override string ToString() {
      return Value == 0 ? "Nothing" : Value.ToString();
    }

    public static implicit operator Byte (Bar value) {
      return value.Value;
    }

    public static implicit operator String(Bar value) {
      return value.ToString();
    }

    public static implicit operator Bar(Byte value) {
      return new Bar(value);
    }

    public static implicit operator Bar(String value) {
      return new Bar(value);
    }
  }

  class Foo {
    private Bar m_Bar;

    public Bar Bar {
      get {
        return m_Bar;
      }
      set {
        m_Bar = value;
      }
    }
  }

现在,让我们玩得开心:

  Foo foo = new Foo();

  foo.Bar = 123;
  foo.Bar = "Nothing";

  String test = foo.Bar;
  Byte testByte = foo.Bar;   

但是,即使您可以这样做,您最好不要这样做,而只是声明两个具有不同名称的属性。

关于c# - 同一个成员变量的两个setter/getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35316450/

相关文章:

c# - ML.Net 0.7 - 获取多类分类的分数和标签

c# - asp.net MVC路由错误404

java - Java 属性文件的良好存储库组织实践

php - 在 PHPDoc 中声明局部变量的属性

python - 如何在 UML 图中建模 python 属性

c# - ModelState.IsValid 不验证模型

c# - 从附加属性设置样式中的 WPF MenuItem 图标

iphone - 在 objective-c 中以编程方式设置属性值

java - 从属性文件中获取常量?

C# Interfaces——只在其他接口(interface)中实现一个接口(interface)