我创建一个单独的unit文件名为unit1,我在其中定义一个类,如下:
  Type TTudi=class(TObject)
  private
    FOwner:TComponent;
    FDWBH: String;
    procedure SetDWBH(const Value: String);
  protected
  public
    Property DWBH:String read FDWBH write SetDWBH; //定义属性
    constructor Create;overload;
    constructor Create(OWner:TObject);overload;
    destructor Destroy;
    procedure Add;            {增加}
  end;
 现在我创建一个frm,在其中uses unit1。
 我定义 public 
        Owner:Ttudi; 
 当我在此界面中执行一些操作时遇到以下问题:
 如果我写语句:Owner.add ; //则执行没有问题
 而当我写语句:Owner.DWBH:='asdf';//则提示我非法操作,而我把语句改成
              Owner :=Ttudi.create(nil);
              Owner.DWBH='asdf'  //则没有问题。
 现在我的问题是:语句  Owner:Ttudi;应该是声明一个Ttudi类的变量,我在没有实例化即Owner :=Ttudi.create(nil);的时候,为什么还可以让Owner.add ; 正常操作?而一旦涉及到类的属性,则必须先  Owner :=Ttudi.create(nil);????????

解决方案 »

  1.   

    因為DWBH屬性不是Public or Publish類型!
      

  2.   

    procedure Add; 默认都是静态的,所以没有CREATE以前都可以使用;你的过程实现代码呢??
      

  3.   

    Add是过程,没创建可以调用
    但是属性必须创建才可以调用
      

  4.   

    我的观点:
      属性必须创建才可以调用,创建后,它所指的地址才有实际意义。这点同于 huifei99(天之痕) 的观点。
      Add是过程,但并不意味着,不创建就可以调用;之所以没有出错,可能是因为Add中没有操作属性。如果Add中对属性进行了操作的话,应该会出错。不知是否正确。