C# 我可以从另一个分部类调用在一个分部类中定义的函数吗。可能吗?

C# 我可以从另一个分部类调用在一个分部类中定义的函数吗。可能吗?,c#,asp.net,partial-classes,C#,Asp.net,Partial Classes,我为一个网页创建了两个分部类 现在我已经给出了一个函数say submit()的定义,我正在button的OnSubmit事件中调用该函数 但此函数未被调用,程序无法编译,因为它无法搜索在另一个分部类中定义的函数定义。可以调用这个函数吗?或者我必须在调用它的同一个文件中给出函数的定义 乙二醇 注册数据库.cs public partial class Web_Pages_Authentication_Login_Management_Registration { c

我为一个网页创建了两个分部类

现在我已经给出了一个函数say submit()的定义,我正在button的OnSubmit事件中调用该函数

但此函数未被调用,程序无法编译,因为它无法搜索在另一个分部类中定义的函数定义。可以调用这个函数吗?或者我必须在调用它的同一个文件中给出函数的定义

乙二醇

注册数据库.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\u Database.cs是三个文件,它们不在App\u Code文件夹中,但只属于一个文件夹,其中Registration.aspx.cs、Registration\u Database.cs是分部类,Registration.aspx是我的设计文件。 如果你想知道更多关于我问题的信息,请告诉我


我没有使用DLL文件。没有预编译代码,当然可以。与类中的所有其他方法(部分或非部分)一样,您可以通过ClassName.MethodName()调用静态方法,或者通过创建类的实例调用非静态方法并调用instanceName.MethodName()

编辑:很抱歉,一开始我没有看到你的例子


这应该行得通。分部类在文件中被拆分,但它被编译为一个类。因此,同一部分类的第二部分可以毫无问题地访问另一部分中定义的私有成员。

是的,可以对(部分)类调用方法

分部类只是某些语言(如C#)的一个特性——它们在IL中不存在,因为它们被编译成一个类

然而,有时这可能会很棘手,因为部分类声明必须完全相同,才能发生这种合并。这包括名称空间,因此这可能是您的问题

举例来说,这将产生一个单独的类:

namespace MyNamespace
{
    public partial class MyClass { }

    public partial class MyClass { }
}
结果类是MyNamespace.MyClass。但是,这将导致两个不同的类别:

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

namespace MyOtherNamespace
{
    public partial class MyClass { }
}

这将产生两个类:MyNamespace.MyClass和MyOtherNamespace.MyClass。在这种情况下,从MyOtherNamespace.MyClass调用
this.MyMethod
将不起作用。

如果我正确理解了您的问题,您有两个文件包含同一类的部分类定义。对吗?他们不是两个不同的班级吗

如果两个文件用于同一个类,则应确保它们都在相同的名称空间中定义,并且类名拼写完全相同。如果名称匹配,那么这应该有效


如果您的分部类定义了两个不同的类,那么相同的规则适用于常规类。要引用另一个类的metod,该方法必须是公共的,并且您需要引用该类的实例,或者该方法必须是静态的。

这应该可以。如果你愿意的话,你可以使用部分方法将事情形式化;在一个文件中声明部分存根,并在另一个文件中实现它。这将快速确定您是有两个类还是一个类,并将突出显示实现未定义的分部方法的尝试:

partial class Foo
{
    partial void Bar(string someArg);
    // other code that uses Bar(s)
}
partial class Foo
{
    partial void Bar(string someArg)
    {
        Console.WriteLine(someArg);
    }
}

请注意,
partial
方法必须是非公共的,并且不能有
out
或非void返回类型。

我认为您遇到的问题是因为您的网站是,而不是预编译的web应用程序

当首次访问ASP.NET页面时,编译器将只查找代码隐藏文件,而不会搜索所有其他.cs文件以查找同一类可能的额外代码。因此,它永远不会看到
display()
的实现,这反过来会导致代码隐藏文件无法编译

我当然不会使用这样的方法来完成您似乎想做的事情,但是您可以定义一个从
System.Web.UI.Page
派生的自定义类,并让您的实际页面从新类派生。对于动态编译的网站,类定义必须位于
App\u code

Registration.aspx.cs:

public partial class Web_Pages_Authentication_Login_Management_Registration : MyPage
{
    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        Display();
    }
}
App\u Code\MyPage.cs:

public class MyPage : System.Web.UI.Page
{
    protected void Display()
    {
        // ...
    }
}
在任何情况下:您当然不应该以使用静态变量的方式使用它们,如果多人同时使用您的站点,这将导致问题。坦率地说,你的例子对我来说没有多大意义。也许如果我们有更多关于你想要完成什么的信息,我们可以提供一个最佳实践方法


请注意,在您的示例中,将第二个文件放入
App\u code
目录不会使其工作。这只会导致两个类具有完全相同的类名(当然前提是名称空间匹配)。它真的不像这样:)

我正在尝试这样做,但是这个函数定义在我的按钮点击事件中不可用。缺少什么?我无法检查我的页面,它位于哪个命名空间中。如何检查。如果源代码中没有
名称空间
声明,则类很可能是在“全局”名称空间中定义的。您可以通过查看反射器中生成的IL来验证这一点。我理解为什么这不起作用,我正在努力解决所有的答案都取决于同一件事,但我想知道如何才能看到我的命名空间。由于我在代码页中看不到任何名称空间,您是否在同一名称空间下的同一程序集(dll)中有这两个类。。。?分部类不能在不同的程序集和不同的名称空间中工作……我无法检查它们是否都位于同一程序集或名称空间中。我如何检查这一点您得到的错误是没有提交方法,这不在您向我们展示的任何代码中。我也在问题“考虑将提交作为此示例的显示函数”的结尾处写了这一行。请看此plzI,我认为您正朝着正确的方向前进。你能再详细说明一下吗
public partial class Web_Pages_Authentication_Login_Management_Registration : MyPage
{
    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        Display();
    }
}
public class MyPage : System.Web.UI.Page
{
    protected void Display()
    {
        // ...
    }
}