powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / protected
6 сообщений из 6, страница 1 из 1
protected
    #38557953
webber81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
http://msdn.microsoft.com/ru-ru/library/bcd5672a(v=vs.100).aspx

Член базового класса с модификатором protected доступен в производном классе только в том случае, если доступ осуществляется через тип производного класса. В качестве примера рассмотрим следующий фрагмент кода:
C#

class A
{
protected int x = 123;
}

class B : A
{
static void Main()
{
A a = new A();
B b = new B();

// Error CS1540, because x can only be accessed by
// classes derived from A.
// a.x = 10;

// OK, because this class derives from A.
b.x = 10;
}
}


Оператор a.x = 10 генерирует ошибку, поскольку он произведен внутри статического метода Main, а не внутри экземпляра класса B.

Объясните пожалуйста что все таки не так со стат методом Main? Хотелось бы посмотреть пример с экземпляром класса В.
...
Рейтинг: 0 / 0
protected
    #38557955
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так вроде все по-русски....

webber81что все таки не так со стат методом Main
С методом Main все в порядке - нельзя обратиться к полю x через класс типа А, так как оно защищено, его может эксплуатировать только наследник

webber81Хотелось бы посмотреть пример с экземпляром класса В.
Так ниже же пример, не дочитали?

Код: c#
1.
2.
// OK, because this class derives from A.
b.x = 10;






ЗЫ: Учимся использовать тэги оформления кода - FAQ
...
Рейтинг: 0 / 0
protected
    #38560455
webber81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нашел это в спецификации
Let B be a base class that declares a protected instance member M, and let D be a class that derives from B. Within the class-body of D, access to M can take one of the following forms:
• An unqualified type-name or primary-expression of the form M.
• A primary-expression of the form E.M, provided the type of E is T or a class derived from T, where T is the class type D, or a class type constructed from D
• A primary-expression of the form base.M.

Но вменяемо перевести не могу (кроме вводного предложения)
Помогите пожалуйста.
...
Рейтинг: 0 / 0
protected
    #38560459
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
webber81,

неквалифицированное имя члена (просто идентификатор)
---
base.идентификатор

это понятно?
...
Рейтинг: 0 / 0
protected
    #38560500
webber81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если я все правильно понял то имелось ввиду следующее

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
using System;
public class B
{
    protected int x = 123;
};
public class D : B
{
    B a = new B();
    D b = new D();
    E e = new E();
    void main1()
    {
        // An unqualified type-name or primary-expression of the form M.
        x = 20;
        this.x = 40;
        //  A primary-expression of the form E.M, provided the type of E is T or a class derived from T, where T is the class type D, or a class type constructed from D
        b.x = 10;
        e.x = 0;
        // A primary-expression of the form base.M.
        base.x = 30;
    }
};
public class E : D
{
};
public class Test
{
    public static void Main()
    {
    }
}
...
Рейтинг: 0 / 0
protected
    #38564720
webber81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что то я в предыдущем экзампле со ссылками натупил.
Вот более читабельный экзампл.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
using System;
public class B
{
    protected int x = 10;
    B b;
    D d;
    F f;
    void MyMethB()
    {
        x = 10;
        this.x = 10;
//      base.x = 10; // у класса B нет базового класса кроме object, а у object нет поля x
        b.x = 10;
        d.x = 10;
        f.x = 10;
    }
}
public class D : B
{
    B b;
    D d;
    F f;
    void MyMethD()
    {
        // An unqualified type-name or primary-expression of the form M.
        x = 10;
        this.x = 10;
        // A primary-expression of the form base.M.
        base.x = 10;
        // A primary-expression of the form E.M, provided the type of E is T 
        // or a class derived from T, where T is the class type D, or a class type constructed from D
//      b.x = 50; // можно обращаться только к экземплярам данного класса(D) и его наследникам
        d.x = 10;
        f.x = 10;
    }
}
public class F : D
{
    B b;
    D d;
    F f;
    void MyMethF()
    {
        x = 10;
        this.x = 10;
        base.x = 10;
//      b.x = 10; // можно обращаться только к экземплярам данного класса(F) и его наследникам
//      d.x = 10; // можно обращаться только к экземплярам данного класса(F) и его наследникам
        f.x = 0;
    }
}
public class Test
{
    public static void Main()
    {
    }
} 
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / protected
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]