2016-12-14 6 views
1

Я знаю, что в C# мы не требуем, чтобы метод явно определял исключения в сигнатуре метода, которые он мог бы использовать. Но я хотел бы знать, как мы обрабатываем сценарии, в которых метод caller должен обрабатывать возможные исключения, вызванные методом callee?Как метод caller знает, какие исключения выбрасываются методом callee?

Позвольте мне пояснить мой вопрос.

Пусть существует метод, определенный в файле DLL, как

public string DoSomething() 
{ 
    // This method do something and returns a string 
} 

Теперь как вызывающему у меня есть знание того, что метод ожидает и того, что он возвращает в качестве result.But как я знаю, что такое возможное исключения, брошенные этим методом.

В jave у нас есть throws ключевое слово. Так что если я определял то же метод в Java, то я мог бы сделать что-то вроде ниже

public String doSomething() throws SomeException { 
    // do something 
    throw new SomeException(); 
} 

Таким образом, вызывающие этого метода знает, что должно быть обработано на их стороне исключения.

Как достичь этого в C#, поскольку C# не имеет throws ключевое слово в сигнатуре метода?

Один из возможных способов - поймать общий Исключение объект. Но снова поймать общее исключение - это ужасный способ справиться с исключениями.

+1

Вы всегда можете использовать комментарии Xml и перечислять там все исключения, которые выбрасывает mehtod. Таким образом, вы сможете увидеть, что при наборе текста из-за intellisense –

+1

Даже с Java вы не просто используете обработку исключений Pokemon и называете это днем. В любом случае вам нужно понять, в каких исключениях метод бросает вызов, с которым можно рационально обращаться, и который всегда требует человеческой интерпретации. –

+0

@Damien_The_Unbeliever Да, но в java, если метод callle повторно перебрасывает унифицированное или настраиваемое исключение (для всех исключений, с которыми этот метод имеет дело), ​​вызывающий должен заботиться только об этом исключении. Но в C#, как даже звонящий знает, что обрабатывать, поскольку подпись метода ничего не дает. Помимо ответов, предоставленных m.rogalski и user3185569, есть ли другой способ достичь этого? Со всем уважением, но являясь разработчиком Java, он не убеждает меня определять все исключения, созданные моим методом в каком-либо файле XML. – amanraj

ответ

1

Существует раздел в документации XML, которая предназначена для этой цели:

/// <summary> 
/// Does something 
/// </summary> 
/// <exception cref="System.OutOfMemoryException"></exception> 
/// <returns></returns> 
public string DoSomething() 
{ 
    // This method do something and returns a string 
} 

Это позволяет дизайнер API предоставить клиенту информацию о том, какие исключения можно ожидать от этого вызова метода. Как это:

enter image description here

Вы можете получить эти строки XML, генерируемые ударяя выше / три раза, когда курсор находится над методом.

Смежные вопросы