2010-07-20 3 views
2

Visual Studio 2005/2008/2010을 사용하는 C# 또는 VB에서 ASP.NET 응용 프로그램을 개발하는 동안 (2003 년에는 문제가 아님), 디자이너에서 컨트롤을 두 번 클릭하거나 새 컨트롤을 두 번 클릭하여 자동으로 새 메서드를 만드는 경우 메서드를 코드 편집기 드롭 다운 (VB 전용)에서 사용하면 액세스 한정자는 private 대신 항상 보호됩니다. 개발자가 매번 메소드를 비공개로 수동으로 변경해야하기 때문에 이것은 성가신 일입니다.에서 새 이벤트 처리기를 자동으로 만들 때 보호 대신 기본 액세스 한정자를 개인으로 설정하는 방법은 무엇입니까?

비주얼 스튜디오가 모든 새로운 메소드 헤더를 보호 대신 비공개로 생성하도록 지시 할 방법이 있습니까?

내 방법을 비공개로 설정하려는 이유에 대해 논쟁하지 마십시오.

+0

나는 논쟁하지 않을 것이다. 그러나 나는 왜 당신이 개인적으로되기를 원하는지에 관심이있을 것이다. 아마 뭔가 새로운/재미있는 것을 배울 수 있습니다. – XIII

+2

우리는 코드를 ASPX 페이지 밖으로 유지하고 코드 숨김에 유지하려고합니다. 이렇게하면 런타임 대신 컴파일 타임에 오류를 잡을 수 있습니다. 메서드를 private로 설정하면 ASPX 페이지에서이를 참조 할 수 없으므로 ASPX 페이지에 메서드 참조가 없음을 보장합니다. –

답변

2

디자이너에서 컨트롤을 두 번 클릭하는 경우에는 작동하지 않습니다.

디자이너에서 컨트롤을 두 번 클릭하면 코드 숨김에 기본 이벤트의 처리기 코드가 만들어 질뿐만 아니라 해당 태그를 참조하도록 태그가 변경됩니다. 예를 들어, 웹 페이지에 버튼을 추가 한 다음, 클릭 더블에, 내가 얻을 :

<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Yes" /> 

것은 내가 "개인이"나는 죽음의 노란색 화면을 얻을 Button1_Click의 가시성을 변경하는 경우 :

컴파일러 오류 메시지 : CS1061 : 'ASP.default_aspx가'볼 수 '를 Button1_Click'에 대한 정의와 유형 'ASP.default_aspx'의 첫 번째 인수를 받아들이는없는 확장 메서드 '를 Button1_Click'를 포함하지 않는 (당신입니다 using 지시문 또는 어셈블리 참조가 누락 되었습니까?)

ASP.NET 페이지가 파싱되어 코드 숨김 클래스에서 파생 된 클래스를 생성합니다. 이 클래스는 이벤트 핸들러와 같은 것을 참조 할 수 있어야합니다.


분명히 VB.NET과 함께 사용하면이 문제가 존재하지 않습니다. 차이점은 VB.NET에서 디자이너는 마크 업을 전혀 변경하지 않으므로 마크 업에서 생성 된 클래스는 생성 된 이벤트 핸들러를 참조 할 필요가 없다는 것입니다. 개인적으로 안전하게 만들 수 있습니다.

그러나,이 생성 된 클래스 새로운 이벤트 핸들러를 참조 할 필요성을 수행하도록 마크 업을 수정 않습니다 C# 에 사용되는 디자이너입니다. 이 경우 이벤트 처리기는을 비공개로 설정할 수 없습니다.

+0

당신이 설명하는 것은 내가 피하기를 원하는 시나리오입니다.내 ASPX 페이지에 코드 숨김의 메서드에 대한 참조가있는 경우 런타임까지 링크가 끊어 졌는지 알 수 없습니다. 대신 메서드를 비공개로 유지하고 이벤트 처리기를 선언적으로 코드에 할당하는 것을 선호합니다. 메서드를 비공개로 유지하면 런타임 오류를 방지하기 위해 메서드 참조를 위해 ASPX 페이지를 검색 할 필요가 없습니다. –

+0

@Carter : 두 번 클릭 할 수 없음을 의미합니다! 수동으로 잘 할 수는 있지만 디자이너를 전혀 사용할 수는 없습니다. 디자이너가 '비공개'방법을 제작하더라도 작동하지 않습니다. –

+0

"Handles"구조로 인해 특별한 변경없이 VB에서 작동합니다. C#에서는 초기화 함수에 이벤트 할당을 추가해야하는 추가 단계가 하나 있습니다. –

1

제 생각에 이것은 디자이너 문제입니다. 페이지의 코드가 "성숙"되거나 체크인하기 전에 "개인"에 대해 "보호 된"검색 및 교체를 수행 한 다음 결과로 발생하는 컴파일 오류를 수정합니다.

그것은 당신의 직업입니다. 그렇다면 왜 그것이 "성가신"것이겠습니까? : O)

+0

그것이 내가 실제로하는 일입니다. 그러나 저는 제 일을 적은 것을 가지고 더 많은 일을하는 코드 작성으로 생각합니다. –

관련 문제