0

vwd express 2010を使用してvbWebプロジェクトをc#に変換します。開発システムは64ビットWindows7です。

一般的に使用される関数が外部csファイルで宣言されています。ファイル「clsCommon.cs」の内容=

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Net.Mail;

namespace Project_Website
{
    public class clsCommon
    {
        public void testA()
        {

        }

    } // clsCommon
} // namespace

コードビハインドでは、次のように関数testA()にアクセスしようとしています。

testA();

また試した:

clsCommon.testA();

Project_Website.clsCommon.testA();

私が使用したい実際の例はもっと複雑ですが、これは私が以下に列挙する問題を明らかにする最も単純な例です:

  1. 入力すると、IntellisenseはclsCommonを認識しますが、testA()がその中のメソッドであるとは考えていません。Intellisenseは、Equals()とReferenceEquals()の2つのメソッドのみを認識します。

  2. Intellisenseを無視してコンパイルすると、次のエラーメッセージが表示されます。

エラー1非静的フィールド、メソッド、またはプロパティ'Project_Website.clsCommon.testA()'にはオブジェクト参照が必要です

この問題の根本的な原因は何ですか?

4

1 に答える 1

6

そのメソッドを作成するか、それを使用するstaticクラスのインスタンスを作成する必要があります。clsCommon

public class clsCommon
{
    public static void testA()
    {

    }

} // clsCommon

上記のメソッドシグネチャは、何も返さず、何も渡さないため、「副作用」を叫ぶことに注意してください。クラスの他のメンバーまたはプロパティを変更する場合は、代わりにインスタンスを作成し、メンバーメソッドを使用する必要があります。

var common = new clsCommon();
common.testA();

staticクラスで他のプロパティやメソッドにアクセスする必要がない場合にのみ、メソッドを作成する必要がありますclsCommon。それがすべてのメソッドにclsCommon当てはまり、一連のユーティリティメソッドを保持しているだけの場合は、clsCommonクラスも静的にする必要があります。

于 2011-10-14T15:50:31.870 に答える