Strict 有什么功能??
要怎么用。 怎么我Baidu 和 Google 它时,它的资料少的可怜 =.=;;×××××××××××××××××××××××××××××××××××来个顺手牵羊吧,看一看以下的网址给意见。。 谢谢。。
http://topic.csdn.net/u/20100823/10/e500dad0-3992-4fb9-b54e-fcdc081d39f7.html

解决方案 »

  1.   


    //这个类中的两个字段没有封装
      TMyClass1 = class
        FName: string;
        FAge:  Integer;
      end;  //这个类中的两个字段封装了, 外部不能读写
      TMyClass2 = class
        private
          FName: string;
          FAge:  Integer;
        //public
      end;  //那怎么读写? 用属性啊  TMyClass3 = class
      private
        FName: String;
        FAge: Integer;
        procedure SetAge(const Value: Integer);
        procedure SetName(const Value: String);
      published
        property Name: String  read FName write SetName;
        property Age:  Integer read FAge  write SetAge;
      end;  {现在 TMyClass3 中的两个字段: FName、FAge 和两个方法: SetAge、SetName
        都被封装在私有区(private)内, 不允许外部读写, 只能是内部使用.
        不过, private 的封装在本单元内是无效的! 现在好了, 有了 strict 标识符.}  //这个封装好了, 在 private 前加了 strict ; 现在除了自己谁也访问不了私有区.
      TMyClass4 = class
      strict private
        FName: String;
        FAge: Integer;
        procedure SetAge(const Value: Integer);
        procedure SetName(const Value: String);
      published
        property Name: String  read FName write SetName;
        property Age:  Integer read FAge  write SetAge;
      end;
    Strict 关键字在Delphi7以上的版本中存在
      

  2.   

    strict的作用就是使该内容变成意义上的private/protected作用域,这点没有什么多说的。语法:strict private// Blah...strict protected// Blah...结构方法(Records with Methods)
    也没什么特别的,就是和class差不多,就一个不用创建和销毁、不能继承、没有作用域之类的类,很容易掌握,所以这里就不多介绍了。但是很有意思的是带参数的constructor可以通过编译,可能是为了初始化的方便吧.......
      

  3.   


    好像和Private 没有分别。。 (指Private 和 Strict Private的分别。)
      

  4.   

    有区别的,在Delphi的Private中,同一单元内的不同的Class之间是能互相访问Private中的变量或函数的。但如果加上了Strict,那么在同一单元内不同的Class之间也不能互相访问Private中的变量或函数了。但是我用的Delphi6好象没这东东。
      

  5.   

    听你这么说。。 好像有不明白了 =.=;;
    气死了。。 strict 一字是从Delphi 7 开始的。。
    不过真的谢谢你,也感激你的用心。。 
      

  6.   


    unit test;interfacetype
       TMyClass1 = class
       private  //未加上strict
         propertyString: String;
       end;
       
       TMyClass2 = class
       public
         procedure MyProcedure;
       end;implementationprocedure TMyClass2.MyProcedure;
    var
      myClass1: TMyClass1;
    begin
      myClass1 := TMyClass1.Create;
      myClass1.propertyString := '属性一'; //现在这种情况是允许的
    end;end.unit test;interfacetype
       TMyClass1 = class
       strict private //加上了strict
         propertyString: String;
       end;
       
       TMyClass2 = class
       public
         procedure MyProcedure;
       end;implementationprocedure TMyClass2.MyProcedure;
    var
      myClass1: TMyClass1;
    begin
      myClass1 := TMyClass1.Create;
      myClass1.propertyString := '属性一'; //现在就不允许了
    end;end.
    注意这两段代码间的区别。你应该就明白了.
      

  7.   

    //这个类中的两个字段没有封装
      TMyClass1 = class
        FName: string;
        FAge:  Integer;
      end;  //这个类中的两个字段封装了, 外部不能读写
      TMyClass2 = class
        private
          FName: string;
          FAge:  Integer;
        //public
      end;  //那怎么读写? 用属性啊
      TMyClass3 = class
      private
        FName: String;
        FAge: Integer;
        procedure SetAge(const Value: Integer);
        procedure SetName(const Value: String);
      published
        property Name: String  read FName write SetName;
        property Age:  Integer read FAge  write SetAge;
      end;
      {现在 TMyClass3 中的两个字段: FName、FAge 和两个方法: SetAge、SetName
        都被封装在私有区(private)内, 不允许外部读写, 只能是内部使用.    不过, private 的封装在本单元内是无效的!
        现在好了, 有了 strict 标识符.  }  //这个封装好了, 在 private 前加了 strict ; 现在除了自己谁也访问不了私有区.
      TMyClass4 = class
      strict private
        FName: String;
        FAge: Integer;
        procedure SetAge(const Value: Integer);
        procedure SetName(const Value: String);
      published
        property Name: String  read FName write SetName;
        property Age:  Integer read FAge  write SetAge;
      end;………………………………………………………………………………………………………………………………
    TMyClass3 的 Private 是供本单元使用,对吗?
    TMyClass4 的 Strict Private 是供TMyClass4 区域使用,但外部单元和区域都禁止,对吗?
      

  8.   


    是 D7 之后的,请查一下 Delphi7 之后的功能,你会得到更多有趣的东西。在同一个 Unit 下写2个Class,申明在 private 的变量是可以互相访问的。
    但是加上 Strict 标识后,就不能访问了,变成真正的 private
      

  9.   

    TMyClass3 的 Private 是供本单元使用,对吗?
    TMyClass4 的 Strict Private 是供TMyClass4 区域使用,但外部单元和区域都禁止,对吗?………………………………………………………………………………………………………………………………
      

  10.   

    d7中相同单元的类都是友元的关系,所以能访问到private下的东西。