OriginalGriff
Не размещайте код как решение - это удаляет ваш вопрос из списка "без ответа" и делает его менее вероятным для рассмотрения. Я переместил ваш код в вопрос и удалил ваш "ответ"
"Несогласованная доступность" означает, что вы пытаетесь добавить что-то, что объявлено более доступным, чем класс, который его содержит.
Например, а internal
класс С а public
метод:
internal class MyClass
{
public void MyMethod (){}
}
Потому что класс есть
internal
он доступен только в файлах одной сборки, вне сборки он не может быть использован или даже ссылаться на него вообще.
Но
MyMethod
является
public
, который означает, что он может быть использован в любом месте на всех. Так как же его можно использовать? Они могут получить доступ
MyMethod
, но не объявлять и не использовать переменную типа
MyClass
- какие средства
Mymethod
это
public
метод, который не может быть использован вне одной и той же сборки!
И вот что говорится в сообщении об ошибке: "несогласованная доступность": "доступность метода больше, чем доступность класса, который его содержит, поэтому он не может быть использован, как вы могли бы ожидать"
Измените свой класс на
public
, или измените свой метод, чтобы соответствовать (или быть менее доступным, чем) класс.
Richard Deeming
Я думаю, тебе нужно еще немного кофе! :)
В этом нет ничего плохого. internal
класс имеющий а public
метод. Код, который не может получить доступ к классу, также не может получить доступ к методу.
Проблема возникает, когда, например, у вас есть public
способ получения один public
класс который выставляет напоказ internal
класс:
internal class Foo
{
public void MyMethod() { } // No error here
}
public class Bar
{
public Foo Bar() { } // Error here
public IEnumerable<Foo> Bars(); // Error here
public void Bah(Foo foo) { } // Error here
public void Bah(IEnumerable<Foo> foo) { } // Error here
public void Baa<T>(T foo) where T : Foo { } // Error here
}