Непоследовательный доступ к <списку>

2

У меня следующая ошибка

CS0053 Несовместимая доступность: тип свойства List<Koers> менее доступен, чем свойство DataStorage.deKoers

Эта проблема похожа на другие сообщения; пока я не могу найти правильное решение:

  • класс DataStorage имеет модификатор публичного доступа
  • исключение публичного модификатора на deLijst или deKoers делает его недоступным вне этого класса (и я хочу получить к ним доступ)
  • удаление общего модификатора из класса DataStorage решает сообщение об ошибке, но делает вне свойств недоступными из любого другого места

Я подозреваю, что список играет неожиданную роль; как это работает со свойством "MyText".

DataStorage instStorage = new DataStorage();
private void LadenInventarisVanDisk()
    {
        var x = instStorage.MyText;
        Console.WriteLine(x.ToString() );

    }


namespace Storage
{
    public class DataStorage
    {
        /* this works fine*/ 
        private string _myText = "text to save" ;
        public string MyText
        {
            get { return _myText; }
            set { _myText = value; }
        }

        private List<Inventaris>  _deLijst;

        /* adding public generate the accessible error*/
        public List<Inventaris> DeLijst
        {
            get { return _deLijst; }
            set { _deLijst = value; }
        }

        private List<Koers> _deKoers;
        /* excluding the public means i cannot call this property from another location */
        List<Koers> deKoers
        {
            get { return _deKoers; }
            set { _deKoers = value; }
        }
    }
}
  • 0
    Это кажется странным - этот List является нормальным из System.Collections.Generic или это пользовательский класс в вашем коде? Обычно я ожидал бы увидеть эту ошибку, если бы List был пользовательским свойством, которое является личным или внутренним, что означало бы, что ваше общедоступное свойство могло быть видно извне сборки, но класс List не мог ...
  • 0
    Обычный: использование System.Collections.Generic; Никаких специальных трюков не применяется.
Показать ещё 6 комментариев
Теги:
list

2 ответа

0
Лучший ответ

Вероятно, ответ заключается в том, что классы Inventaris и/или Koers менее доступны, чем публичные (доступность по умолчанию для классов является internal если она не является вложенной, и private если вложенная.) Оба являются более строгими, чем публичные, и вызовут ошибку). Хороший способ исправить это - всегда явно указывать уровень доступа для всего - это делает такие ошибки легче увидеть

4

Доступность List<T> определяется доступностью данного T, поэтому ваши классы Koers и Inventaris должны быть общедоступными, чтобы List<Koers/List<Inventaris> возвращался вашими свойствами, поскольку свойство не может быть более видимым, чем объект, который он возвращает.

Смотрите это для другого примера.

Итак, ваши классы должны быть объявлены так:

public class Koers
{
    //Class code here
}

public class Inventaris
{
    //Class code here
}

РЕДАКТИРОВАТЬ: Как предложил Крис, я немного прояснил свой ответ.

  • 1
    Ваше первое предложение не совсем верно. Они должны быть публичными, чтобы быть возвращенными публичной собственностью. Вы можете иметь менее видимое свойство (например, частное), и они будут действительными. Ключевым моментом является то, что свойство не может быть более видимым, чем объект, который оно возвращает, и в этом случае List<T> виден только как T

Ещё вопросы

Сообщество Overcoder
Наверх
Меню