6

Webページ用に2つの部分クラスを作成しました。

これで、ボタンのOnSubmitイベントで呼び出すsubmit()という1つの関数を定義しました。

ただし、この関数は呼び出されていません。別の部分クラスで定義された関数の定義を検索できないため、プログラムはコンパイルされません。この関数を呼び出すことは可能ですか、それとも同じファイルで関数の定義を指定する必要がありますか?

例えば

<%@ Page Language="C#" MasterPageFile="~/Master Pages/LeftMenu.master" AutoEventWireup="true" CodeFile="Registration.aspx.cs" Inherits="Web_Pages_Authentication_Login_Management_Registration" Title="Registration" StylesheetTheme="Default Theme 1"  %>

Registration.aspx.cs

public partial class Web_Pages_Authentication_Login_Management_Registration : System.Web.UI.Page
{
    private string firstName;
    private string lastName;
    private string userName;
    private string userPassword;
    private string primaryEmail;
protected void btnSubmit_Click(object sender, EventArgs e)
    {
       Display();
    }
}

Registration_Database.cs

   public partial class Web_Pages_Authentication_Login_Management_Registration 
    {
       const string dbFirstName = "@FirstName";
       const string dbLastName = "@LastName";
       const string dbUserName= "@UserName";
       const string dbUserPassword = "@UserPassword";
       const string dbPrimaryEmail = "@PrimaryEmail";  

       void Display()
          {
              firstName="XYZ"; //This variable is not accessible when i put both files in different directories
          }
    }

次のエラーが発生します

Error   1   'Web_Pages_Authentication_Login_Management_Registration' does not contain a definition for 'Display' and no extension method 'Display' accepting a first argument of type 'Web_Pages_Authentication_Login_Management_Registration' could be found (are you missing a using directive or an assembly reference?) C:\Documents and Settings\Administrator\Desktop\Online Test\Web Pages\Authentication\Login Management\Registration.aspx.cs  78  20  C:\...\Online Test\

Registration.aspx、Registration.aspx.cs、Registration_Database.csは、App_Codeフォルダーにはないが、Registration.aspx.cs、Registration_Database.csが部分的なクラスであり、Registration.aspxが私の設計である1つのフォルダーにのみ属する3つのファイルです。ファイル。Plzは、私の問題についてもっと知りたい場合は私に知らせてください

DLLファイルを使用していません。プリコンパイルされたコードはありません

4

5 に答える 5

1

もちろんできます。クラスの他のすべてのメソッドと同様に (部分的かどうかに関係なく)、ClassName.MethodName() によって静的メソッドを呼び出すか、クラスのインスタンスを作成して instanceName.MethodName() を呼び出す非静的メソッドを呼び出します。

編集: 申し訳ありませんが、最初はあなたの例を見ませんでした。

それはうまくいくはずです。一部のクラスはファイルに分割されますが、1 つのクラスとしてコンパイルされます。したがって、同じ部分クラスの 2 番目の部分は、他の部分で定義されたプライベート メンバーに問題なくアクセスできます。

于 2010-01-05T12:00:24.937 に答える
1

はい、(部分的な) クラスでメソッドを呼び出すことは可能です。

部分クラスは一部の言語 (C# など) の機能にすぎません。これらは 1 つのクラスにまとめてコンパイルされるため、IL には存在しません。

ただし、このマージを行うには、部分クラス宣言が完全に同一でなければならないため、注意が必要な場合があります。これには namespace が含まれているため、これが問題になる可能性があります。

例として、これは単一のクラスになります。

namespace MyNamespace
{
    public partial class MyClass { }

    public partial class MyClass { }
}

結果のクラスは MyNamespace.MyClass です。ただし、これにより、次の 2 つの異なるクラスが生成されます。

namespace MyNamespace
{
    public partial class MyClass
    {
        public void MyMethod();
    }
}

namespace MyOtherNamespace
{
    public partial class MyClass { }
}

これにより、MyNamespace.MyClass と MyOtherNamespace.MyClass の 2 つのクラスが作成されます。この場合、this.MyMethodMyOtherNamespace.MyClass からの呼び出しは機能しません。

于 2010-01-05T12:00:58.720 に答える
1

あなたの質問を正しく理解できれば、同じクラスの部分的なクラス定義を含む 2 つのファイルがあります。右?彼らは2つの異なるクラスではありませんか?

両方のファイルが同じクラス用である場合は、両方が同じ名前空間で定義されていること、およびクラス名のスペルがまったく同じであることを確認する必要があります。名前が一致する場合、これは機能するはずです。

部分クラスが 2 つの異なるクラスを定義する場合、通常のクラスと同じルールが適用されます。別のクラスのメソッドを参照するには、メソッドがパブリックである必要があり、そのクラスのインスタンスへの参照が必要であるか、メソッドが静的である必要があります。

于 2010-01-05T12:01:20.833 に答える