귀하의 웹 사이트가 미리 컴파일 된 웹 애플리케이션이 아니라 동적으로 컴파일 되기 때문에 발생한 문제라고 생각합니다 .
ASP.NET 페이지에 처음 액세스 할 때 컴파일러는 파일 뒤에있는 코드 만보고 동일한 클래스에 대해 가능한 추가 코드를 찾기 위해 다른 모든 .cs 파일을 검색하지 않습니다. 따라서의 구현을 볼 수 없으므로 display()
파일 뒤에있는 코드가 컴파일되지 않습니다.
나는 확실히 당신이하고 싶은 일에 대해 이와 같은 방법을 사용하지 않을 것이다. 그러나 당신 System.Web.UI.Page
은 당신의 실제 페이지가 새로운 클래스에서 파생되는 커스텀 클래스를 정의 할 수있다 . 클래스 정의는 App_Code
동적으로 컴파일 된 웹 사이트 에 있어야합니다 .
Registration.aspx.cs :
public partial class Web_Pages_Authentication_Login_Management_Registration : MyPage
{
protected void btnSubmit_Click(object sender, EventArgs e)
{
Display();
}
}
App_Code \ MyPage.cs :
public class MyPage : System.Web.UI.Page
{
protected void Display()
{
// ...
}
}
어쨌든 : 정적 변수를 사용하는 방식으로 사용해서는 안됩니다. 여러 사람이 동시에 사이트를 사용하는 경우 문제가 발생할 수 있습니다. 솔직히, 당신의 예는 나에게별로 의미가 없습니다. 수행하려는 작업에 대해 더 많은 정보가 있다면이를 수행 할 수있는 최상의 방법을 제공 할 수 있습니다.
귀하의 예제에서 두 번째 파일을 App_Code
디렉토리에 넣으면 작동하지 않습니다. 그 결과 정확히 동일한 클래스 이름을 가진 두 개의 클래스가 생성됩니다 (물론 네임 스페이스가 일치하는 경우). 정말 싫어요 :)
예, (부분) 클래스에서 메서드를 호출 할 수 있습니다.
부분 클래스는 일부 언어 (예 : 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의 두 클래스가 생성됩니다. 이 경우 this.MyMethod
MyOtherNamespace.MyClass에서 호출이 작동하지 않습니다.
귀하의 질문을 올바르게 이해하면 SAME 클래스에 대한 부분 클래스 정의가 포함 된 두 개의 파일이 있습니다. 권리? 두 개의 다른 클래스가 아닌가요?
두 파일이 동일한 클래스에 대한 것이라면 두 파일이 동일한 네임 스페이스에 정의되어 있고 클래스 이름의 철자가 정확히 동일한 지 확인해야합니다. 이름이 일치하면 작동합니다.
부분 클래스가 두 개의 다른 클래스를 정의하는 경우 일반 클래스와 동일한 규칙이 적용됩니다. 다른 클래스의 metod를 참조하려면 메서드가 공용이어야하며 해당 클래스의 인스턴스에 대한 참조가 필요하거나 메서드가 정적이어야합니다.
-------------------물론 당신은 할 수. 클래스의 다른 모든 메서드와 마찬가지로 (부분적이든 아니든) ClassName.MethodName ()에 의해 정적 메서드를 호출하거나 클래스의 인스턴스를 만들 때 정적 메서드를 호출하고 instanceName.MethodName ()을 호출합니다.
편집 : 처음에는 귀하의 예를 보지 못해 죄송합니다.
작동합니다. 부분 클래스는 파일로 분할되지만 하나의 클래스로 컴파일됩니다. 따라서 동일한 partial 클래스의 두 번째 부분은 문제없이 다른 부분에 정의 된 private 멤버에 액세스 할 수 있습니다.
-------------------괜찮습니다. 원하는 경우 부분적인 방법을 사용하여 형식화 할 수 있습니다. 한 파일에서 부분 스텁을 선언하고 다른 파일에서 구현합니다. 이렇게하면 클래스가 두 개 또는 한 개 있는지 신속하게 식별하고 정의되지 않은 부분 메서드를 구현하려는 시도를 강조합니다.
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
또는 비 무효 반환 형식.
출처
https://stackoverflow.com/questions/2005847