2009-04-14 4 views
3

私は面白いシナリオを見つけました。私はC#でクラスを持っている:.NET内の言語で大文字と小文字を区別する名前を持つメンバーにアクセス

public class Test 
{ 
    public int A; 
    public int a; 
} 

C#は大文字と小文字が区別されますように、この2つの変数Aaなどの個別に扱います。 VBコードで上記のクラスを継承したいですが、大文字と小文字は区別されません。 VBコードはどのようにして2つの異なる変数Aaにアクセスしますか?

何か助けていただければ幸いです。

答えて

6

クロス言語互換性を保証する共通言語仕様(CLS)は、大文字と小文字が異なる2つのパブリックメンバーを宣言しないように指示します。このようなコードはCLSに準拠しません。あなたのコードは、言語間の機能のクロスであるためにあなたがする場合は、

obj.GetType().GetField("a").GetValue(obj) 
obj.GetType().GetField("A").GetValue(obj) 
0

あなたを:あなたは、ライブラリのコードを変更できない場合

、手動であなたがしたいフィールドを選択するために、リフレクションAPIを使用することができます両方の言語で動作する命名基準に従う必要があります。

私は個人的には、同じ名前を持ち、大文字とは異なる2人のパブリックメンバーを持つことは非常に複雑です。あなたが反射機能私は、私はそれ以上この溶液中

here is the link to how

、それは私が考えるの変数のために、機能についてです見つけようとしますどのように、どこか見た

を使用する必要があり、そのための

5

:-)今の両方を取得しますケース

でのみ異なる2つのパブリックメンバを宣言し、あなたが他の.NET言語から使用することができCLSの苦情コードを書くためのVisual Studioをしたい場合は、ちょうどあなたの中

[assembly: System.CLSCompliant(true)] 

を書くためompliant AssemblyInfo.csファイル、あなたはこの行を書いた後、間違った何かをした場合、Visual Studioが幸せになることはありません:)
EDIT:またはAssemblyInfo.vbあなたはVB.NET、感謝Lucas

+0

actuaを使用している場合、それはC#ファイルのAssemblyInfo.cs、VBファイルのAssemblyInfo.vbなどです – Lucas

関連する問題