嗨,我有一个私人方法课。我试图使用属性向其方法发送两个值(两个参数)但它不工作。有时它会给编译器错误和一些时间错误答案(逻辑错误)。
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());
}
答案 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原则引起的混乱。以下几种方法可以实现您的目标。
让您的方法公开。这样做有什么不对,因为你没有存储任何东西,而且没有什么可以封装的:
public class Adder
{
public int Add(int value1, int value2)
{
return value1 + value2;
}
}
在类构造函数中传入参数:
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;
}
}