在C#中通过引用传递值的语法问题

时间:2013-12-31 18:25:14

标签: c# winforms reference pass-by-reference

我正在尝试制作一些动态更新Windows Forms元素的代码,以便将我的一些后端代码与表单集成,但在语法中遇到了一个小小的速度问题。

现在我的代码是:

public virtual class DynamicDisplay
{
    private Control c;
    public DynamicDisplay(ref Control display)
    {
        c = display;
    }
    //interprets the attribute visually and shows it in the control
    public abstract void ShowVal(double valToDisplay);
}
public class ProgBarDynamicDisplay : DynamicDisplay
{
    private double max;
    public ProgBarDynamicDisplay(ProgressBar p, double nMax) : base(ref p)
    {
        max = nMax;
    }
}

但是这给了我一个“不匹配的方法”错误。有没有人知道我应该通过引用超类来传递进度条的语法?

2 个答案:

答案 0 :(得分:1)

ref的构造函数中不需要DynamicDisplay,因为您未在该函数中重新分配display。只需删除ref即可。还要删除ref

所在的base(ref p)

答案 1 :(得分:1)

也许是这样的?

public abstract class DynamicDisplay
{
   private Control c;
   public DynamicDisplay(Control display)
   {
       c = display;
   }

   //interprets the attribute visually and shows it in the control
   public abstract void ShowVal(double valToDisplay);
}

public class ProgBarDynamicDisplay : DynamicDisplay
{
   private double max;
   public ProgBarDynamicDisplay(ProgressBar p, double nMax)
            : base( p)
   {
            max = nMax;
   }

 public override void ShowVal(double valToDisplay)
 {
      MessageBox.Show("Value : " + valToDisplay);
 }   
}

测试:

namespace TestProject3
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestMethod1()
        {
            ProgressBar p = new ProgressBar();
            TestProject3.Class1.ProgBarDynamicDisplay pbdr = new     TestProject3.Class1.ProgBarDynamicDisplay(p, 100);
            pbdr.ShowVal(10);
        }
    }
}