代码之家  ›  专栏  ›  技术社区  ›  Patrick

为什么instance.property.property在C中不起作用?

c#
  •  0
  • Patrick  · 技术社区  · 14 年前

    我有一个强大的C++背景,我刚开始使用C++语言。

    在测试应用程序中,我编写了以下构造(wf是我自己编写的类的实例):

    wf.m_button = new Button();
    wf.m_button.FlatStyle = FlatStyle.System;
    

    但是编译器(Visual C#Express 2008,使用.Net 3.5)给出了这个错误:

    “System.Windows.Forms.Control”不包含“FlatStyle”的定义,也没有接受“System.Windows.Forms.Control”类型的第一个参数的扩展方法“FlatStyle”(是否缺少using指令或程序集引用?)

    如果我把代码改成这个:

    Button button = new Button();
    wf.m_button = button;
    button.FlatStyle = FlatStyle.System;
    

    这很管用。

    为什么C++中不允许使用StaseC.PrimyType属性,而在C++中,你可以很容易地写出这样的东西:

    myVariable->myDataMember->anotherDataMember = ...;
    
    2 回复  |  直到 14 年前
        1
  •  4
  •   Ed Swangren    14 年前

    它与属性链接无关。您已将m_button声明为控件对象,而不是按钮。控件类不公开FlatStyle属性。即使您知道m_button是一个隐藏的按钮,编译器也无法确定这一点,因为您可以指定 任何东西 to m_按钮,它是控件对象的实例或控件类的后代。

        2
  •  2
  •   Vlad    14 年前

    作为对@Ed回答的补充:你可以

    wf.m_button = new Button() { FlatStyle = FlatStyle.System };
    

    也。