2016-07-05 1 views
0

동일한 유형의 여러 선택적 입력 매개 변수를 사용할 수있는 코드화 된 UI에서 메서드를 작성하고 있습니다. 제 질문은 그러한 방법을 쓰는 가장 좋은 방법입니다. (인터넷의 여러 곳에서 제안되는) 메소드 오버로딩이나 명명 된 매개 변수와 선택적 매개 변수 조합을 사용해야하는지 여부.
코딩 된 UI : 동일한 데이터 형식의 여러 선택적 매개 변수가있는 메서드를 작성하는 가장 좋은 방법은 무엇입니까

이름 : 문자열 : 필수
나이 : 문자열 : 필수
위치 : 문자열 : 옵션
확인란 가입하기 : 선택
체크 박스의 경우 이 방법은 실제로 아래의 필드에 값을 입력하려고 확인 : 아래 입력란에 자세한 내용을 입력하십시오.

명명 된 인수와 선택적 매개 변수의 조합을 사용하는 경우 메서드 정의의 매개 변수 목록이 길어 보이며 여러 가지 옵션을 전달하거나 건너 뛰는 경우 메서드의 오버로드가 쉽고 확실하지 않은지 잘 모르겠습니다. 매개 변수를 사용하면 목적을 해결할 수 있습니다. 나는 C# 코딩에 익숙하지 않으므로 모든 포인터를 매우 높이 평가합니다.

+0

내 제안은 서로 다른 유형의 정보를 둘러싼 래퍼로 작동 할 수있는 몇 가지 클래스를 만드는 것입니다. 당신은 특히 모든 매개 변수가 동일한 유형을 가지고 있다고 언급했습니다 - 그러나 모든 매개 변수가 다른 목적을 가지고 있다고 확신합니다. 그걸 기반으로 개체를 구축하십시오. 예를 들어,'checkbox'가 선택되면,'NewAccount' 객체를 전달하여 그 정보를 저장할 수 있습니다. 'Name','age','location'은 모두'Person' 객체의 일부가 될 수 있습니다. 이렇게하면 메서드 서명이 간단 해지고 코드를 더 정확하게 유지할 수 있습니다. –

+0

Richard에게 감사드립니다. 나는 같은 종류의 필드에 대한 래퍼로 클래스를 생성 한 다음 클래스 객체를 전달하는 것이 깔끔한 방법 일 것이라고 동의합니다. 그러나 내 방법은 어느 매개 변수를 선택적 필드에 넣을 지 어떻게 알 수 있습니까? 예 : 이메일, 성별, 주문 유형 등 3 개의 선택 입력란이 있고 전자 메일, 주문 유형 만 전달하려는 경우 어떻게 내 방법에서이를 이해할 수 있습니까? – user5252179

+0

래퍼 객체에 필드가 있다면, 전자 메일이라고 말하면 그 필드는 null입니다. 왜냐하면 당신이 그것을주지 않았기 때문에 결코 필드를 설정하지 않았기 때문에, 당신의 메소드는 그것에 대해 걱정하지 않는다는 것을 알고 있습니다. 요점은 객체가 필요한 값의 컨테이너라는 것입니다. 값이 설정되지 않았다면 거기에 없으므로 신경 쓰지 않아도됩니다. 필요한 변수가 아니라면 예외를 throw하고 사용자에게 필드가 필요하다고 알려야합니다. –

답변

0

당신의 경우에 과부하가 가장 좋은 방법이라고 생각합니다. 우리는 항상 이런 종류의 문제에 대한 클래스의 메소드 오버로딩을 사용했습니다. 누군가가 그 장소에 넣고 싶지 않지만 등록을 원한다는 사실을 기억하십시오.

+0

귀하의 응답을 주셔서 감사합니다 그래서 메서드 오버로드와 나는 고유 한 서명과 여러 가지 방법을 만들어야 할 것입니다. 그러나 유일한 문제는 같은 데이터 (문자열) 형식 (여러 가지 옵션 필드가 내 예제에서 위에 포함되어 있지 않음)입니다.이 경우 어떻게하면 내 메서드에서 사용할 선택적 필드를 알 수 있습니까? – user5252179

+0

im는 C++에서 최고는 아니지만 항상 가장 간단한 방법을 시도합니다. void person (문자열 이름, 문자열 위치, 부울 확인란) void 사람 (문자열 이름, 문자열 길이, 문자열 위치) void 사람 (문자열 이름, 문자열 위치, 문자열 위치, 부울 확인란) 무효의 사람 (문자열 이름, 문자열의 나이, bool의 체크 박스)' 만약 내가 잘못하면 누군가가 나를 고쳐야 만하지만 그건 내가 그것을 어떻게 할 것인가. –

+0

매개 변수 개체를 전달하는 것이 모든 조합을 오버로드하는 것보다 낫습니다. – MPavlak

1

당신의 필드를 포함하는 래퍼 객체를 사용

class Person{ 
    string name location; 
    Gender gender; 
    int age; 
    public Person(string name, int age, string location = null, Gender gender = null){ 
     // set fields 
     // location is optional so it might be null. 
     // Gender can be an object or an enum type. 
    } 
} 
class NewAccount{ 
    String email, password; 
} 
class Order{ 
    String OrderType = null; 
} 

다음 메소드의 서명과 같이 보일 것이다 :

public void myMethod(Person person, Order order, NewAccount newAccountInfo = null){ 
    //Do whatever here 
} 

점이다 이러한 개체는 방법 잘 정의 된 인터페이스를 제공하는 거기에있을 수도 있고 없을 수도있는 매개 변수를 사용하는 대신에 사용할 수도 있습니다.

+0

리차드가 이렇게 상세하고 유익한 답변을 주신 데 대해 감사드립니다. 내가 가진 또 하나의 질문은 위의 코드에서 Person.gender가 null을 넘겨 준 다음 myMethod에 성별이! = null 인 다음 성별을 입력하라는 논리를 정의해야한다는 것입니다. – user5252179

+0

예, null을 확인해야합니다. myMethod에서 해당 정보를 가져와야 할 필요가 없기 때문에가 아니라 저장하거나 다른 방식으로 사용할 경우를 대비해야합니다. –

+1

myMethod가 절대적으로 성별을 사용해야한다면 반드시 필요합니다. 나는 당신이 여기서하려고하는 것에 대한 완전한 이야기를 가지고 있지 않다. - 그러나 myMethod를 호출하기 전에 선택적으로 (null 인 경우에도) 필요한 모든 정보를 가져야한다. 그것을 사용하기 전에 null 여부에 관계없이 가져야합니다. null 인 경우 사용하려고하면 예외가 발생합니다. 값이 null이며 해당 작업을 완료하는 데 필요한 값이면 문제가 발생하여 예외가 발생합니다. 즉 유효성 검사입니다. –

관련 문제