2013-05-23 3 views
-1

너무 길어 화면에서 벗어나는 방법입니다. 프로그램하면서 인생을 더 편하게하기 위해서, 클래스의 변수를 참조하고 싶다면 사용하는 언어에 따라 Me 또는 this 개체를 사용할 수 있습니다.함수의 매개 변수를 포함하는 객체가 있습니까?

eg. Me.var1 = "Hello" 

객체가 있는가 (같은 Me) 함수의 매개 변수를 쉽게 참조 할 수 있도록 것인가?

eg. params.par1 = "World" 
+2

왜 그런 것이 필요합니까? 우리가 당신의 필요를 이해한다면, 우리는 방법을 제안 할 수 있습니다. –

+2

프로그래밍을 쉽게하기 위해서 - 만약 내가 함수에서 멀리 떨어져 있다면, 스크롤 할 필요없이 어떤 파라미터가 있는지보고 싶습니다. – CJ7

+3

그래서 Visual Studio 편집기에서 응용 프로그램 자체가 아닌 무언가를 원하십니까? – Dialecticus

답변

0

짧은 대답은 아니오입니다. 불행히도 같은 이름을 가진 함수 매개 변수와 필드에 대해 매개 변수 범위와 클래스 범위를 구별하기 위해이 함수를 사용하려는 것 같습니다. 어느 다른 명명 체계를 사용하거나 다음을 수행하십시오

public class MyClass { 
    private string myString; 
    private int myInt; 
    public MyClass(string myString) { 
    this.myString = myString; 
    } 
    public int DoStuff(int myInt) { 
    this.myInt += myInt; 
    return this.myInt; 
    } 
} 

정말 선택하고 문제를 방지하기를, 당신은 이름을 바꿀 수 :

public class MyClass { 
    private string m_myString; 
    private int m_myInt; 
    public MyClass(string myString) { 
    m_myString = myString; 
    } 
    public int DoStuff(int myInt) { 
    m_myInt += myInt; 
    return m_myInt; 
    } 
} 

을 그리고 당신은 정말하기 전에 테스트를 작성하여 시작해야 코드에서 코드를 실수로 혼합하지 않았는지 확인할 수 있습니다.

각주

이 질문의 제목에 오는 사람들이 다음과 같은 정보를 찾을 수있는 바와 같이이 포함되어 있습니다.

당신은

그냥 프로그래밍의 용이성을 위해 말을하는 동안 - 나는 아래 함수에서 먼 길을 생각하면 내가

을 스크롤하지 않고도가 어떤 매개 변수보고 싶다 다른 이유로 인해 코드 내부에서 매개 변수를 실제로보고 싶다면 리플렉션이 필요합니다. 이것은 느리기 때문에 일반적으로 메소드를 찾은 다음 해당 메소드의 매개 변수를 반영합니다. 매우 포괄적 인 샘플은 MSDN - ParameterInfo Class을 참조하십시오. 코드의 관련 부분은 다음과 같습니다

foreach (MemberInfo mi in typeof(MyClass).GetMembers()) 
{ 
    // If the member is a method, display information about its parameters. 
    if (mi.MemberType==MemberTypes.Method) 
    { 
    foreach (ParameterInfo pi in ((MethodInfo) mi).GetParameters()) 
    { 
    Console.WriteLine("Parameter: Type={0}, Name={1}", pi.ParameterType, pi.Name); 
    } 
} 
0

당신은

MethodInfo barMI = bar.GetMethod("Foo"); 
ParameterInfo[] pars = barMI.GetParameters(); 
foreach (ParameterInfo p in pars) 
{ 
    Console.WriteLine(p.Name); 
} 

당신은 실행 시간에 이것을 사용할 수 있습니다 GetParameters() 반사 방법을 사용할 수 있어야합니다. 그러나 당신의 목표를 위해 나는 기능과 이름의 수를 리팩터링하려고 노력할 것이다. 코드 길이를 줄 당 80 개의 기호와 100 이하의 줄에있는 줄 수로 유지하려고합니다. 항상 가능한 것은 아니지만, 물건을 분리하고 클래스를 간단하게 유지하는 것이 좋은 목표입니다.

+0

이것은 이름을 제공하지만 값은 어떨까요? –

+0

OP가 말합니다. '프로그래밍의 용이성을 위해서 - 만약 내가 함수에서 먼 길을 걷고 있다면 스크롤 할 필요없이 매개 변수가 무엇인지보고 싶습니다. VS 확장이 필요합니다. – I4V

+0

@ I4V 예와 OP가 다음과 같이 추가되었습니다. 내가 대답 한 후 논평. 내가 편집하여 클래스를 더 간단하게 만들었습니다. 비록이 대답이 downvote 자격이 있는지 확실하지 않습니다. – oleksii

0

간단한 방법은 매개 변수를 객체에 캡슐화하여 참조 할 수 있고 intellitype (또는 예측 기능)를 사용하면 백업 할 필요없이 사용할 수있는 속성을 표시합니다.이

public class MyParamObject{ 
    public string FirstParam {get;set;} 
    public string SecondParam {get;set;} 
} 

는 그런 다음

public void MyReallyOvergrownMethod(MyParamObject params){... 

public void MyReallyOvergrownMethod(string firstParam, string secondParam){... 

에서 방법을 변경할 수있다처럼 당신은 방법

//Deep inside the method 
if(params.FirstParam == "SomeValue"{//Do something 

이 같은 PARAMS 매개 변수를 사용할 수 있습니다 이것은 쓸모없는 해결책이다. n 당신의 방법을 리펙토링함으로써 가장 잘 해결 될 수있는 문제. 루프와 조건문을보고 개별적 방법으로 분리하십시오. 당신이 cleancoders를 검색하는 경우 이것에 물건을로드합니다.

0

"프로그래밍을 쉽게하기 위해서 - 만약 내가 함수에서 아주 길다면 어떤 매개 변수를 스크롤하지 않고도 볼 수 있습니다.": Visual Studio에서 코드가 표시되고, 스크롤바 바로 위를 가로 질러 잡아 당겨 창을 나눌 수 있습니다. 그런 다음 함수 선언을 한 창에 표시하고 다른 창에서 원하는만큼 스크롤 할 수 있습니다. 또는 창 메뉴 -> 분할을 사용할 수 있습니다.

6

해당 언어에는 기능이 없습니다. 로컬 변수 및 메서드 인수는 .NET 지터에 의해 특별히 처리됩니다. 은 주로 런타임에 최적화되어 있습니다. .NET이 수행 할 수있는 모든 작업, 또는 그러한 작업을 수행하는 것이 그러한 최적화를 무력화시킬 수 있습니다.

아주 간단한 해결책은 Window + Split을 사용하는 것이므로 코드에서 두 가지보기를 제공합니다. 맨 위를 메서드 헤더로 스크롤하고 코드를 맨 아래에 씁니다. 맨 아래 창에 더 많은 공간을 제공하도록 스플리터를 조정할 수 있습니다.

IntelliSense를 이용하는 것은 다른 방법입니다. 인수 이름 앞에 "par"와 같은 작은 문자열을 붙입니다. 그런 다음 코드에 "par"를 입력하면 IntelliSense 팝업 창에 인수 이름 목록이 자동으로 표시됩니다.

그러나 실제 문제의 경우에는 이러한 문제가 있습니다. 이와 같이되면 즉시 코드를 작게 만들기 위해 코드를 분할해야합니다. 30 년 동안 코딩 한 후 발견 한 몇 가지 어려운 사실이 있습니다.

  • 긴 메소드에는 더 많은 버그가 있습니다. 이를 위해 "순환 복잡성"이라는 측정 기준이 있습니다. 숫자가 높을수록 코드가 손상 될 확률이 높아집니다. Visual Studio에서 잘 지원되는이 blog post이 유용합니다.
  • 코드를 3 단계 이상 들여 쓰면 안됩니다. 순환 운동의 복잡성이 도구를 실행하지 않고 손을 떼고 있음을 발견하는 가장 간단한 방법입니다.
  • 방법은 화면의 어떤 크기보다 커야합니다. 적합하지 않은 코드는 컴파일 오류 및 버그를 생성하는인지 적 세금입니다. 이것에 대한 결론이 있습니다. 큰 모니터를 가진 프로그래머는 더 많은 버그를 만듭니다. 사용하는 어려운 규칙은 DOS 편집기를 사용하여 영감을 얻은 것입니다. 메서드에는 25 줄 이상의 코드가 있어서는 안됩니다.
  • 와이드 코드를 사용하면 볼 수없는 특수한 종류의 버그가 생성됩니다. 화면 오른쪽에 표시된 내용은 모두 시간이 걸릴 수있는 버그가있는 코드입니다. VB.NET은 문장의 종결 자로 줄 끝 (end-of-line)을 사용하기 때문에 이런 종류의 버그에 특히 취약합니다. VS2010 btw가 크게 향상되어 많은 경우 밑줄이 선택 사항입니다.이런 종류의 버그를 피하려면 항상 줄을 끊으십시오.
  • 미리 계획하고 유지 관리 가능 코드을 작성하십시오. 유지 보수 된 코드는 원본보다 작습니다. 이미 원래 코드를 작성하는 데 어려움이 있다면 정의에 따라 유지 보수 할 수 없습니다. 작게 시작해야합니다.
  • 항상 먼저 디자인하고 나중에 코드하십시오. 긴 메서드는 코딩을 시작하기 전에 코드에 대해 충분히 생각하지 않는 강력한 지표입니다. 그 자체로는 강력한 버그 유도기뿐만 아니라 일을 제대로하지 않는 올바른 코드를 작성합니다.
관련 문제