VB6

2012-03-12 9 views
7
の公共財産、友達とパブリック変数間の差

はので、私はイオンVB6、クラスでカプセル化されたプロパティは、次の3つのカテゴリのいずれかに属することができることを理解OK何です:VB6

  • 公開プロパティ
  • 友達
  • パブリック変数

これらとどのようにこれらは、C#などのより現代的な言語での公共および民間の特性と比較しないの違いは何ですか?

+3

あなたはプライベートプロパティを忘れてしまった。どのような場合でも、この基本的な質問はマニュアルを読むことで簡単に答えられます。 – Bob77

答えて

9

スコープ予選Publicを使用し、同じですFrienddetermine異なるプロジェクトのクライアントがアイテムを表示できるかどうか。

  • Publicアイテムは、他のプロジェクト と同じプロジェクトでコードにクライアントコードにアクセスできるようになります。
  • Friend他のプロジェクトでコーディングする場合はではなく、のコードにのみアクセスできます。
  • Privateアイテムは、同じクラスのコードにのみアクセスできます。クライアントが値を取得または設定したときの特性と独自のコードを実行することができますので、

プロパティは、パブリック変数異なっています。 EDITディアナのコメントに従う:変数はByRefを関数に渡すことができ、変更は期待通りに機能することにも注意してください。これはプロパティの場合ではありません。

NB C#はより現代的かもしれませんが、IMHOは.Net処理よりもプロパティと公開変数のVB6処理がsignificantly betterです。

  • VB6では、クライアントを壊さずにパブリック変数をプロパティに変更できます。それらを再コンパイルする必要はありません。 .NetのNot true
  • VB6では、データバインディングで公開変数を使用できます。 .NetのNot true
  • VB6では、インターフェイスでインターフェイス変数を使用できます。 .NetのNot true

IMHO Microsoftは、.Netのプロパティとパブリックフィールドの間にこれらの相違点を作成する際に実際の設計ミスを犯しました。確信していない? .Netの最初のリリースの後、C#VBコンパイラはautomatically implemented propertiesをサポートするように変更されました。これらを使用すると、1行のコードでプロパティを作成できるため、後で問題を起こさずにget/setにロジックを追加することができます。 IMHOは、公的変数が財産と区別できなくてはならないことを証明しています。


1と仮定すると、プロジェクトの種類は、実際にあなたのクラスが他のプロジェクト(すなわちのActiveX DLL、OCX、またはActiveX EXE)で使用することができます。
Property LetおよびProperty Setの手順では、

+0

VB6では、クラスで定義されたパブリック変数は、プロパティとして表の下にコンパイルされます。これは、OLEビューなどのツールを使用して、コンパイル後にdllを検査することで確認できます。彼らはあなたが言及した "自動的に実装されたプロパティ"と同等です。 – tcarvin

+0

申し訳ありませんが、「VB6では、クライアントを壊さずにパブリック変数をプロパティに変更できます」ということは、VB6に公開クラスの公開変数があるという印象をOPに与えるかもしれないと思った。 – tcarvin

+1

また、変数はByRefを関数に渡すことができ、変更は期待どおりに機能します。これはプロパティの場合ではありません。私は、これが.NET/ILのフィールドとプロパティに分割された理由だと思います。 – Deanna

2
  • パブリックとは、他のどのクラスでもアクセス可能であることを意味します。 がプロジェクト/ dllをrefferencesします。
  • 友達は

それが によってアクセス可能であることを、あなたのアセンブリ内の他のクラス(あなたが クラスを作ったので、唯一のexeファイル)を意味変数とプロパティがallmost同じです。プロパティは、C#では

(プロパティ変数をカプセル化する)他のクラス変数を設定または取得することができた場合は、設定することができるので好まれ、それはあなたが内部の代わりに、友達

1

私的財産は、自分自身や他の家族によって使用される財産です。しかし、公有財産は、私たちの社会、社会、国のすべての人々が使用する財産です。

+0

そんな単純な類推だけど、それは本当にそれをよく説明していると思う。 –