2009-06-09 1 views
1
namespace MyApp.MyNamespace 
{ 
    public class MyClass:System.Web.UI.Page 
    { 
     private DataUtility Util = new DataUtility(); 
     private CookieData cd = MyClass.Toolbox.GetCurrentCookieData(HttpContext.Current); 
     //below I get the error: "System.Web.UI.Util is unavailable due to its protection level" 
     private int CompanyID = Util.GetCompanyIDByUser(cd.Users); 

    protected override void OnLoad(EventArgs e) 
    { 
     //I'd like to use CompanyID here 
    }   

    protected void MyEventHandler(object sender, EventArgs e) 
    { 
     //as well as here 
    } 
} 

А вот DataUtility:Получение доступности Ошибка на Общественном объекта

public class DataUtility 
{ 
    public DataUtility() {} 
    //snip 
    public int GetCompanyIDByUser(int UserID) 
    { 
     //snip 
    } 
} 

Я смотрел и DataUility, а также метод внутри него объявляются публично, так что я не знаю, почему я я получаю эту ошибку.

ответ

0

Я просто добавил статическое ключевое слово к инициализатору DataUtility, и все работало как шарм. Всем спасибо. :)

0

Инициализатор поля не может ссылаться на нестатические элементы его собственных членов класса. Если вы переместите Util = new DataUtility(), cd = ... и C ompanyID = ... в конструктор по умолчанию, я считаю, что ваш код может работать.

+0

Я добавил все это между MyClass() {// здесь}, но столкнулся с той же ошибкой. –

1

Вы не можете ссылаться на поле экземпляра вашего класса в инициализаторе поля.

Переместить cd = Util.GetCompanyIDByUser(cd.Users); в конструктор класса, и он будет работать.

Причина, по которой вы получаете неверное сообщение об ошибке, заключается в том, что ваше поле Util противоречит внутреннему типу в инфраструктуре .NET. Если вы переименуете Util в util (нижний регистр u), вы получите более правильное сообщение об ошибке (но это не решит проблему, если вы не переместите вызов метода на конструктор MyClass, как указано выше).

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