none
VBで予約語を変数名として用いる方法、またはVBとC#を混在させる方法 RRS feed

  • 質問

  • 「Type型のプロパティをプロパティウィンドウで設定したい」
    http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=892889&SiteID=7
    で、自作のEnumを作成することにしたのですが、ちょっと問題が発生しました。



    Namespace MyControls
        Public Enum MyTextBoxValidatingTypeCode
            String = TypeCode.String
            Int16 = TypeCode.Int16
            Int32 = TypeCode.Int32
            Int64 = TypeCode.Int64
            Single = TypeCode.Single
            Double = TypeCode.Double
            Decimal = TypeCode.Decimal
            DateTime = TypeCode.DateTime
        End Enum

        Public Class MyTextBox
            Private _validatingTypeCode As MyTextBoxValidatingTypeCode = MyTextBoxValidatingTypeCode.String
            Public Property ValidatingTypeCode() As MyTextBoxValidatingTypeCode
                Get
                    Return Me._validatingTypeCode
                End Get
                Set(ByVal value As MyTextBoxValidatingTypeCode)
                    Me._validatingTypeCode = value
                End Set
            End Property
    End Namespace

     

    としたかったところですが、こうするとEnumの中のStringやDoubleなどがVBの予約語で引っかかってしまいます。
    そこで、「C#なら大文字と小文字を見分けるのでいいかも・・・」と思い、今度はEnumの部分だけ別のソースファイル
    (プロジェクトは同一)に分けて以下のようにしました。


    Namespace MyControls
        Public Class MyTextBox
            Private _validatingTypeCode As MyTextBoxValidatingTypeCode = MyTextBoxValidatingTypeCode.String
            Public Property ValidatingTypeCode() As MyTextBoxValidatingTypeCode
                Get
                    Return Me._validatingTypeCode
                End Get
                Set(ByVal value As MyTextBoxValidatingTypeCode)
                    Me._validatingTypeCode = value
                End Set
            End Property
    End Namespace

     



    namespace MyControls
    {
        public enum MyTextBoxValidatingTypeCode
        {
            String = TypeCode.String,
            Int16 = TypeCode.Int16,
            Int32 = TypeCode.Int32,
            Int64 = TypeCode.Int64,
            Single = TypeCode.Single,
            Double = TypeCode.Double,
            Decimal = TypeCode.Decimal,
            DateTime = TypeCode.DateTime
        }
    }

     

    が、Enumの部分のエラーはなくなりましたが、VB側からEnumが使用できません。
    VBで予約語を変数名として用いるかまたはVBとC#を混在させる方法は無いのでしょうか?
    尚、VBとC#のプロジェクトを分ける(アセンブリや名前空間が分かれる)のは避けたいです。

    2006年11月7日 5:07

回答

  •  ダッチ さんからの引用

    予約語を [] で囲んでください。

    で、できました。(何か、恥ずかしい、汗

    時々ソースで[]で括った型名の記述を見かけることがあったのですが、どういう意味なの分からずに
    漠然と「丁寧な書き方をしているのだろう」ぐらいにしか思わなかったのですが、こういう意味があったのですね。

    2006年11月7日 5:26

すべての返信

  • 予約語を [] で囲んでください。
    2006年11月7日 5:16
  •  ダッチ さんからの引用

    予約語を [] で囲んでください。

    で、できました。(何か、恥ずかしい、汗

    時々ソースで[]で括った型名の記述を見かけることがあったのですが、どういう意味なの分からずに
    漠然と「丁寧な書き方をしているのだろう」ぐらいにしか思わなかったのですが、こういう意味があったのですね。

    2006年11月7日 5:26
  • [戯言]

    既存の FCL にも Select メソッドなどなど、予約語を含んだメソッドがありますよね。
    オブジェクト ブラウザで見ると... ちゃんと [ ] で括ってあります。

    1 番よく使われるのは、[Assembly] でしょうか。
    (名前空間つきで書けば問題なしですが)

    [/戯言]

    2006年11月15日 5:16