다른 메서드 중 생성자 메서드가 들어있는 별도의 클래스 파일이 있는데이 클래스의 인스턴스를 Windows 폼 내에 만듭니다. 필요한 파일이 존재하지 않으면 FileNotFoundException
으로 catch하는 경우 생성자 메서드 내에서 예외 처리를 수행해야합니다. 내 유일한 문제는 인수를 전달할 수 없거나 생성자 클래스의 데이터를 반환 할 수 없기 때문에 예외의 결과를 Windows 양식에 전달하는 방법을 알 수 없다는 것입니다.생성자 메서드에서 try-catch 예외 처리
답변
개념상의 실수를 저지르고 있습니다. 생성자는 인생에서 단 하나의 목적을 가지고 있습니다. 바쁜 평생 동안 클래스 인스턴스를 준비하는 것입니다. 따라서 가능한 결과는 2 가지뿐입니다.
- 건설 성공. 개체를 사용할 수 있습니다.
- 예외로 인해 구성이 중단 되었기 때문에 구성이 실패합니다.
당신이 언급 파일이 함수에 개체에 대한 중요한을 경우,이 예외를 catch하고 그냥가 인스에 외부 미끄러 못하게한다. 이 경우에는 '오류를 반환하고 객체를 반으로 사용할 수있는 상태로 두는 것이 바람직하지 않습니다. 양식의 이벤트 핸들러는 예외를 포착하여 사용자에게 전달해야합니다.
사용 가능한 개체가 여전히 반환 될 수있는 사용 사례가있는 경우 public static MyClass instantiateConditionally(string filename, out bool somethingHappenedAlongTheWay)
과 같은 정적 메서드를 구현해야합니다. 이렇게하면 인스턴스를 계속 반환 할 수 있으며 잘못된 것을 반환 할 수 있습니다.
예외가 발생하더라도 개체를 성공적으로 생성해야합니까?
그렇다면 생성자에서 예외를 처리하지 마십시오. 객체를 생성하는 윈도우 폼 메서드에서 처리하십시오.
그렇다면 객체에서 생성자에서 예외가 처리 된 경우 true를 반환하는 부울 속성 HasErrors
을 구현하는 것이 좋습니다. 처리 된 예외 (인스턴스 필드에 편리하게 저장 됨) 또는 null
을 반환하는 메서드 GetErrors()
도 구현합니다. 이 방법을 사용하면 객체 작성 중에 예외가 발생하여 그에 따라 작동하면 항상 윈도우 양식 메서드를 확인할 수 있습니다.
다음과 같은 것이 있습니까?
public class Form1 : Form
{
...
public void button_Click(...)
{
try
{
var myclass = new MyClass(@"C:\...some file");
...
}
catch (FileNotFoundException)
{
MessageBox.Show("Can't find the file required");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
public class MyClass
{
public MyClass(string path)
{
if(string.IsNullOrEmpty(path))
throw new ArgumentNullException();
if(!File.Exists(path))
throw new FileNotFoundException();
...
}
}
여기서는 사용자가 일부 버튼을 클릭 할 때 MyClass의 인스턴스를 만듭니다.
경로가 지정되지 않았거나 파일이 지정된 경로에서 발견되지 않으면 MyClass의 클래스 생성자가 예외를 throw합니다.
나는 try catch를 사용하여 던져진 예외를 잡아 내고 사용자에게 메시지 상자를 표시합니다.
- 1. 비동기 메서드에서 예외 처리
- 2. 예외 처리 생성자
- 3. 예외 처리 및 생성자
- 4. C++ 생성자 예외 처리
- 5. Java - 메서드에서 여러 예외 처리
- 6. EasyMock 하나의 메서드에서 여러 예외 처리
- 7. asp.net MVC 컨트롤러에서 발생하는 예외 처리 생성자
- 8. 스택 객체에 대한 C++ 생성자 예외 처리
- 9. SignalR 생성자 예외 핸들
- 10. 예외 처리
- 11. PHP 예외 처리 예외 처리
- 12. tryCatch : 오류가 발견되지 않았습니다.
- 13. 프로토 타입 메서드에서 액세스 생성자
- 14. 백그라운드 작업자 예외 처리
- 15. Gemfire 예외 처리
- 16. Integer.parseInt() 예외 처리 개념
- 17. trycatch 블록에서 NullPointerException이 발생했습니다.
- 18. NSObject의 performSelectorOnMainThread를 통해 호출 된 메서드에서 예외 처리 : withObject : waitUntilDone :
- 19. 확장 메서드에서 null 처리
- 20. C++ catch 생성자 예외
- 21. 생성자 및 예외 발생
- 22. 예외 생성자 클래스
- 23. 생성자 및 예외
- 24. junit.framework.AssertionFailedError : 예외 생성자 : (java.lang.NoClassDefFoundError)
- 25. 런타임 예외 SQLiteOpenHelper 생성자
- 26. 정적 생성자 및 예외
- 27. 활동의 AsyncTask.doInBackground에서 예외 처리?
- 28. 예외 처리 : 발생시킬 예외
- 29. 다중 스레드 응용 프로그램에서 정적 생성자 예외 처리
- 30. 처리 예외 처리
코드의 약식 버전을 포함 할 수 있습니까? 어쩌면 생성자 대신 정적 메서드를 사용합니다. 파일 읽기가 실패 할 경우 개체를 생성하고 싶지 않으면? –