C#赋值不符合预期

时间:2010-01-04 22:06:04

标签: c#

有一个派生自System.Windows.Forms.UserControl的类,并实现一个接口IFoo。在使用指定的高度创建SomeControl实例并将其分配给本地IFoo变量 display 之后,尝试通过它公开为显示的高度属性赋值塞特不适合我。

我正在通过调试器观察这一点,所以我试图简化这个测试用例以简化操作。我意识到"select isn't broken"所以我的知识存在差距,为什么我不能设置这个属性所以我想了解它是什么。感谢。

public interface IFoo
{
    int Height {get;set;} // which is implemented by UserControl
}

public class SomeControl : UserControl, IFoo { /*impl goes here*/ }

[TestFixture]
public class TestFixture
{
   [Test]
   public void Test()
   {
       IFoo display = ...
       // assume that display is of type SomeControl 
       // and already has a value for Height at 123

       Assert.IsTrue(display.Height == 123);
       display.Height = 789; 
       Assert.IsTrue(display.Height == 789);  //FAILS 
   }
}

5 个答案:

答案 0 :(得分:1)

这是因为UserControl已经定义了height属性。要访问您的实现,您需要进行强制转换。

((IFoo)display).Height = 789;

那应该有用。另外,我假设您的高度属性是明确定义的吗?

public int IFoo.Height { get; set; }

答案 1 :(得分:1)

以下代码运行正常,因此问题必须出在您的假设或您遗漏的代码中。

请您发一个简短但完整的程序,我们可以自行编译和测试吗?

using NUnit.Framework;
using System.Windows.Forms;
public interface IFoo
{
    int Height { get; set; } // which is implemented by UserControl
}

public class SomeControl : UserControl, IFoo
{
    public SomeControl()
    {
        Height = 123;
    }
}

[TestFixture]
public class TestFixture
{
    [Test]
    public void Test()
   {
       IFoo display = new SomeControl();

       Assert.IsTrue(display.Height == 123);
       display.Height = 789; 
       Assert.IsTrue(display.Height == 789);
   }
}

答案 2 :(得分:0)

实现IFoo的类型是结构还是类?如果它是一个结构,那么在创建它之后就无法更改它的属性。

如果您共享SomeControl的代码,可以帮助进一步诊断问题。

此外,如果您可以在调试器中运行单元测试并检查该值,那么这也会有所帮助。

最后,编写此类测试的推荐方法如下:

Assert.AreEqual(123, display.Height);

当单元测试失败时(这是),这将提供更好的错误报告。

答案 3 :(得分:0)

C#中的接口仅仅是对任何实现者的要求的合同描述。该短语的关键是“实施”。

编辑:刚看到你的类继承自UserControl,它已经拥有了Height属性。要访问界面的Height属性,必须从测试中明确引用该属性。

答案 4 :(得分:0)

我认为您的问题是UserControl已经有一个名为Height的属性,而且IFoo也定义了Height。我认为你没有提供足够的信息来回答这个问题,但我认为,根据你对IFoo的实现,你的Height属性要么隐藏了UserControl版本的Height,要么被它隐藏。我相信它是后者,因为我的回忆是Height是UserControl上的只读属性。