我如何使用属性

时间:2015-08-14 10:24:15

标签: c#

嗨,我有一个私人方法课。我试图使用属性向其方法发送两个值(两个参数)但它不工作。有时它会给编译器错误和一些时间错误答案(逻辑错误)。

class sum
{
    private int add (int a, int b) 
    {
        return a+b;
    }

    private int ts;
    public int MyProperty
    {
        get { return ts; }
        set { ts = add(value,value);
    }
}

主类中的代码

private void button5_Click(object sender, EventArgs e)
{
    sum sumv = new sum();
    sumv.MyProperty=2;

    int sumj = sumv.MyProperty;
    MessageBox.Show(sumj.ToString());
}

4 个答案:

答案 0 :(得分:0)

如果你想练习OOP概念 - 你的方式是不正确的。

这个类更适合OOP:

public class Adder
{
    public int Result {get; private set;}   // private setter allow you to hide this member.

    public void Sum(int value1, int value2)
    {
        Result = value1 + value2;
    } 
}

答案 1 :(得分:0)

简而言之,答案是:您无法向属性设置器发送两个参数。

属性只是意味着合成糖,以避免必须实现java / c ++ - 类似访问器(getProperty(),setProperty()...)。

话虽这么说,你可以在value完成对属性的设置者的一些工作(比如检查它是否在某个值范围内,甚至修改它...... )。但是value是您使用它的唯一价值。

公共方法本质上并不坏,否则我们首先没有意思使用它们。我想知道你在哪里见过它。

答案 2 :(得分:0)

对此有一些规则:

  

如果您要将私有方法公开给其他类   但你不想公开它然后创建一个公共委托   并使用此委托传递您的方法

您的财产可以是委托类型。在这种情况下,get方法将返回委托。此委托包含您可以运行的方法add:

class sum
{
    private int add (int a, int b) 
    {
        return a+b;
    }

    public Func<int, int, int> MyProperty
    {
        get { return add; }
    }
}

并像这样使用它:

private void button5_Click(object sender, EventArgs e)
{
    sum sumv = new sum();

    int sumj = sumv.MyProperty(5, 10);
    MessageBox.Show(sumj.ToString());
}

答案 3 :(得分:0)

这里似乎存在很多由OOP原则引起的混乱。以下几种方法可以实现您的目标。

  1. 让您的方法公开。这样做有什么不对,因为你没有存储任何东西,而且没有什么可以封装的:

    public class Adder
    {
        public int Add(int value1, int value2)
        {
            return value1 + value2;
        }
    
    }
    
  2. 在类构造函数中传入参数:

    public class Adder
    {
        private int _value1;
        private int _value2;
    
        public Adder(int value1, int value1)
        {
            _value1 = value1;
            _value3 = value2; 
        }
    
        public int Add()
        {
            return _value1 + _value2;
        }
    
    }