Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 08.11.2012
Сообщений: 28

Ошибка Для нестатического поля, метода или свойства "QuaterLib.Quater.Square()" требуется ссылка на объект

01.03.2014, 23:34. Показов 5285. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Подскажите что не так я намудрил. Вот само задание.
Необходимо реализовать иерархию классов. Определить иерархию зданий квартала. Создать жилой квартал города. Посчитать жилую общую площади зданий квартала.
1. Иерархия должна состоять не менее чем из 3 уровней.
2. Каждый класс должен содержать уникальный набор полей.
3. В классах не должно быть открытых полей(должны быть модификаторы доступа private или protected).Для доступа к полям класса использовать свойства.
4. В процессе реализации иерархии классов использовать абстрактные классы.
5. Классы рекомендуется оформить в виде библиотеки классов. Проверку функциональности осуществить в консольном проекте.
6. В рамках решения создать диаграммы классов.

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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace QuaterLib
{
    public abstract class Quater
    {
        public abstract void Print();
        public abstract int Square();
    }
 
    public class AllBuildings : Quater
    {
        public override void Print()
        {
            Console.WriteLine("Общая площадь квартала = {0}",NonameBuildings.Square()+Buildings.Square());
        }
        public override int Square()
        {
            throw new NotImplementedException();
        }
    }
    public class NonameBuildings : AllBuildings
    {
        public NonameBuildings(int buildingArea, int numberBuilding)
        {
            BuildingArea = buildingArea;
            NumberBuilding = numberBuilding;
        }
        public int BuildingArea
        {
            get
            {
                return BuildingArea;
            }
            set
            {
                BuildingArea = value;
            }
        }
        public int NumberBuilding
        {
            get
            {
                return NumberBuilding;
            }
            set
            {
                NumberBuilding = value;
            }
        }
        public override void Print()
        {
            Console.WriteLine("Площадь безымянных зданий = {0}", BuildingArea*NumberBuilding);
        }
        public override int Square()
        {
            return BuildingArea * NumberBuilding;
        }
    }
 
    public class Buildings : AllBuildings
    {
        public override void Print()
        {
            Console.WriteLine("Площадь зданий = {0}", SocialBuildings.Square() + PersonalBuildings.Square());
        }
        public override int Square()
        {
            return SocialBuildings.Square() + PersonalBuildings.Square();
        }
    }
    public class PersonalBuildings : Buildings
        {
        public PersonalBuildings(int numberOfBuildings, int floorArea, int floors)
        {
            Floors = floors;
            FloorArea = floorArea;
            NumberOfBuildings = numberOfBuildings;
        }
        public int Floors
        {
            get
            {
                return Floors;
            }
            set
            {
                Floors = value;
            }
        }
        public int FloorArea
        {
            get
            {
                return FloorArea;
            }
            set
            {
                FloorArea = value;
            }
        }
        public int NumberOfBuildings
        {
            get
            {
                return NumberOfBuildings;
            }
            set
            {
                NumberOfBuildings = value;
            }
        }
        public override void Print()
        {
            Console.WriteLine("Площадь жилых зданий  = {0}",FloorArea*Floors*NumberOfBuildings);
        }
        public override int Square()
        {
            return Floors * FloorArea * NumberOfBuildings;
        }
        
        }
    public class SocialBuildings : Buildings
        {
    public SocialBuildings(int numberOfBuildings, int floorArea, int floors)
        {
            Floors = floors;
            FloorArea = floorArea;
            NumberOfBuildings = numberOfBuildings;
        }
        public int Floors
        {
            get
            {
                return Floors;
            }
            set
            {
                Floors = value;
            }
        }
        public int FloorArea
        {
            get
            {
                return FloorArea;
            }
            set
            {
                FloorArea = value;
            }
        }
        public int NumberOfBuildings
        {
            get
            {
                return NumberOfBuildings;
            }
            set
            {
                NumberOfBuildings = value;
            }
        }
        public override void Print()
        {
            Console.WriteLine("Площадь социальных зданий  = {0}",FloorArea*Floors*NumberOfBuildings);
        }
        public override int Square()
        {
            return Floors * FloorArea * NumberOfBuildings;
        }
        }
 
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.03.2014, 23:34
Ответы с готовыми решениями:

Ошибка “Для нестатического поля, метода или свойства требуется ссылка на объект”
static void Main() { using (Imap imap = new Imap()) { imap.Connect(_server); ...

Ошибка - Для нестатического поля, метода или свойства требуется ссылка на объект
Делаю по мануалам https://docs.microsoft.com/ru-ru/dotnet/api/system.windows.forms.filedialog?view=netcore-3.1 ...

Для нестатического поля, метода или свойства требуется ссылка на объект
Здравствуйте, не могу решить проблемы в программе. Почти дописал парсер математических выражений на С# через построение AST. Визуалка...

9
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
01.03.2014, 23:40
C#
1
SocialBuildings.Square() + PersonalBuildings.Square();
Square() - не статический метод, значит для его вызова необходимы экземпляры классов SocialBuildings и PersonalBuildings
C#
1
2
3
var personal = new PersonalBuildings(3, 200, 6);
var social = SocialBuildings(8, 100, 9);
return social.Square() + personal.Square();
1
0 / 0 / 0
Регистрация: 08.11.2012
Сообщений: 28
01.03.2014, 23:56  [ТС]
А как быть тут:
C#
1
2
3
4
5
public override void Print()
        {
            var noname = new NonameBuildings(400,20);
            Console.WriteLine("Общая площадь квартала = {0}",noname.Square()+ Buildings.Square());
        }
С Buildings.Square(), тоже требует ссылку на объект.
Да и в других методах Print()
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
02.03.2014, 00:01
leniament, также создавайте объект для каждого использования Square()
1
0 / 0 / 0
Регистрация: 08.11.2012
Сообщений: 28
02.03.2014, 11:00  [ТС]
Так это же библиотека классов. Объекты я думал нужно будет создавать в другом классе в main, подключив туда эту библиотеку(но ее же надо с начала скомпилировать, а в этом беда). Может я несу чушь, но я очень junior в этом, так что извините. Может направите в нужное русло. Спасибо.

Добавлено через 10 часов 53 минуты
Делаю методы статическими чтобы не создавать экземпляры классов в библиотеке классов. И теперь
Ошибка Статический член "QuaterLib.NonameBuildings.Square()" не может быть помечен как override, virtual или abstract

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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace QuaterLib
{
    public abstract class Quater
    {
        public void Print();
        public static int Square();
    }
 
    public class AllBuildings : Quater
    {
        public override void Print()
        {
           
            Console.WriteLine("Общая площадь квартала = {0}",NonameBuildings.Square()+ Buildings.Square());
        }
        public override int Square()
        {
            throw new NotImplementedException();
        }
    }
    public class NonameBuildings : AllBuildings
    {
        public NonameBuildings(int buildingArea, int numberBuilding)
        {
            BuildingArea = buildingArea;
            NumberBuilding = numberBuilding;
        }
        public static int BuildingArea
        {
            get
            {
                return BuildingArea;
            }
            set
            {
                BuildingArea = value;
            }
        }
        public static int NumberBuilding
        {
            get
            {
                return NumberBuilding;
            }
            set
            {
                NumberBuilding = value;
            }
        }
        public override void Print()
        {
            Console.WriteLine("Площадь безымянных зданий = {0}", BuildingArea*NumberBuilding);
        }
        public static override int Square()
        {
            return BuildingArea * NumberBuilding;
        }
    }
 
    public class Buildings : AllBuildings
    {
        public override void Print()
        {
            Console.WriteLine("Площадь зданий = 0");
        }
        public static override int Square()
        {
                   
            return PersonalBuildings.Square() + SocialBuildings.Square();
        }
    }
    public class PersonalBuildings : Buildings
        {
        public PersonalBuildings(int numberOfBuildings, int floorArea, int floors)
        {
            Floors = floors;
            FloorArea = floorArea;
            NumberOfBuildings = numberOfBuildings;
        }
        public static int Floors
        {
            get
            {
                return Floors;
            }
            set
            {
                Floors = value;
            }
        }
        public static int FloorArea
        {
            get
            {
                return FloorArea;
            }
            set
            {
                FloorArea = value;
            }
        }
        public static int NumberOfBuildings
        {
            get
            {
                return NumberOfBuildings;
            }
            set
            {
                NumberOfBuildings = value;
            }
        }
        public override void Print()
        {
            Console.WriteLine("Площадь жилых зданий  = {0}",FloorArea*Floors*NumberOfBuildings);
        }
        public static override int Square()
        {
            return Floors * FloorArea * NumberOfBuildings;
        }
        
        }
    public class SocialBuildings : Buildings
        {
    public SocialBuildings(int numberOfBuildings, int floorArea, int floors)
        {
            Floors = floors;
            FloorArea = floorArea;
            NumberOfBuildings = numberOfBuildings;
        }
        public static int Floors
        {
            get
            {
                return Floors;
            }
            set
            {
                Floors = value;
            }
        }
        public static int FloorArea
        {
            get
            {
                return FloorArea;
            }
            set
            {
                FloorArea = value;
            }
        }
        public static int NumberOfBuildings
        {
            get
            {
                return NumberOfBuildings;
            }
            set
            {
                NumberOfBuildings = value;
            }
        }
        public override void Print()
        {
            Console.WriteLine("Площадь социальных зданий  = {0}",FloorArea*Floors*NumberOfBuildings);
        }
        public static override int Square()
        {
            return Floors * FloorArea * NumberOfBuildings;
        }
        }
 
}
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
02.03.2014, 11:29
ответ уже есть в вопросе
Цитата Сообщение от leniament Посмотреть сообщение
Статический член ... не может быть помечен как override, virtual или abstract
0
0 / 0 / 0
Регистрация: 08.11.2012
Сообщений: 28
02.03.2014, 11:32  [ТС]
Ну я пробую делать не abstract, не override и лезет куча других ошибок.
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
02.03.2014, 11:51
Цитата Сообщение от leniament Посмотреть сообщение
я пробую делать не abstract, не override и лезет куча других ошибок.
вот с ними и нужно разбираться
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
02.03.2014, 17:37
Лучший ответ Сообщение было отмечено leniament как решение

Решение

Примерно так. Добавьте к классам свои свойства, какие надо. И еще там заготовки для подкласса магазин с разделением на 2 класса, можете реализовать.
Вот код библиотеки.
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
using System;
using System.Collections.Generic;
using System.Text;
 
namespace MyLibrary
{
    //Класс Здание
    public abstract class Building
    {
        protected int Xpos;//Позиция по X        
        protected int Ypos;//Позиция по Y
 
        //Конструктор
        public Building(int x, int y, string type)
        {
            Xpos = x;
            Ypos = y;
            Type = type;
        }
        //Свойство типа
        public string Type { get; private set; }
        //Метод площади
        abstract public double S();
    }
    //Класс дом->здание
    public class House : Building
    {
        //Конструктор
        public House(int x, int y, string type)
            : base(x, y, type)
        {
        }
        //Площадь
        public override double S()
        {
            return Xpos * Ypos;
        }
    }
    //Класс частный дом->дом
    public class Private_House : House
    {
        //Конструктор
        public Private_House(int x, int y, string type)
            : base(x, y, type)
        {
        }
        //Площадь
        public override double S()
        {
            return base.S();
        }
    }
    //Класс многоквартирный дом->дом
    public class Common_House : House
    {
        //Количество квартир
        private int Quarter_Num;
        //Количество этажей
        private int Floor_Num;
 
        //Конструктор
        public Common_House(int x, int y, string type, int Quarters, int Floors)
            : base(x, y, type)
        {
            Quarter_Num = Quarters;
            Floor_Num = Floors;
        }
        //Площадь
        public override double S()
        {
            return base.S();
        }
        //Свойство количества квартир
        public int Quater_Numbers
        {
            get { return Quarter_Num; }
        }
        //Свойство количества этажей
        public int Floors_Numbers
        {
            get { return Floor_Num; }
        }
    }
    //Класс магазин->здание
    public class Shopping //: Building
    {
    }
    //Класс большой магазин->магазин
    public class Big_Shopping //: Shopping
    {
    }
    //Класс маленький магазин->магазин
    public class Small_Shopping //: Shopping
    {
    }
}
А вот код использования. Я специально указал полное имя при объявлении, чтобы понятнее было, хотя это не обязательно, поскольку директива using есть. Закомментированные строки - то же самое, только с использованием кода не из библиотеки.
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
using System;
using System.Collections.Generic;
using System.Text;
using MyLibrary;
namespace Квартал
{
    class Program
    {
        static void Main(string[] args)
        {
 
            MyLibrary.Building[] House_Mass = new MyLibrary.Building[3];
            House_Mass[0] = new MyLibrary.House(23, 54, "House 1");
            House_Mass[1] = new MyLibrary.Common_House(54, 76, "Common House", 200, 10);
            House_Mass[2] = new MyLibrary.Private_House(43, 87, "Private House");
 
            double S = 0;
            foreach (var item in House_Mass)
                S += item.S();
            
            //Building[] House_Mass = new Building[6];
 
            //House_Mass[0] = new House(26, 43, "Private House 1");
            //House_Mass[1] = new Common_House(68, 91, "Common House 1", 200, 10);
            //House_Mass[2] = new Private_House(84, 42, "Private House 1");
            //House_Mass[3] = new Common_House(45, 90, "Common House 2", 120, 8);
            //House_Mass[4] = new Private_House(43, 56, "Private House 2");
            //House_Mass[5] = new House(23, 59, "Private House 2");
 
            //double S=0;
 
            //foreach (var item in House_Mass)
            //    S += item.S();
 
            Console.WriteLine("Общая площадь зданий: {0}", S);
 
            Console.Read();
        }
    }
    //Класс Здание
    //abstract class Building
    //{
    //    protected int Xpos;//Позиция по X        
    //    protected int Ypos;//Позиция по Y
 
    //    //Конструктор
    //    public Building(int x, int y,string type)
    //    {
    //        Xpos = x;
    //        Ypos = y;
    //        Type = type;
    //    }
    //    //Свойство типа
    //    public  string Type { get; private set; }
    //    //Метод площади
    //    abstract public double S();
    //}
    ////Класс дом->здание
    //class House : Building
    //{
    //    //Конструктор
    //    public House(int x, int y,string type)
    //        : base(x, y, type)
    //    {
    //    }
    //    //Площадь
    //    public override double S()
    //    {
    //        return Xpos * Ypos;
    //    }
    //}
    ////Класс частный дом->дом
    //class Private_House : House
    //{
    //    //Конструктор
    //    public Private_House(int x, int y, string type)
    //        : base(x, y, type)
    //    {
    //    }
    //    //Площадь
    //    public override double S()
    //    {
    //        return base.S();
    //    }
    //}
    ////Класс многоквартирный дом->дом
    //class Common_House : House
    //{
    //    //Количество квартир
    //    private int Quarter_Num;
    //    //Количество этажей
    //    private int Floor_Num;
 
    //    //Конструктор
    //    public Common_House(int x, int y, string type,int Quarters,int Floors)
    //        : base(x, y, type)
    //    {
    //        Quarter_Num = Quarters;
    //        Floor_Num = Floors;
    //    }
    //    //Площадь
    //    public override double S()
    //    {
    //        return base.S();
    //    }
    //    //Свойство количества квартир
    //    public int Quater_Numbers
    //    {
    //        get { return Quarter_Num; }
    //    }
    //    //Свойство количества этажей
    //    public int Floors_Numbers
    //    {
    //        get { return Floor_Num; }
    //    }
    //}
    //Класс магазин->здание
    //class Shopping //: Building
    //{
    //}
    ////Класс большой магазин->магазин
    //class Big_Shopping //: Shopping
    //{
    //}
    ////Класс маленький магазин->магазин
    //class Small_Shopping //: Shopping
    //{
    //}
}
1
0 / 0 / 0
Регистрация: 08.11.2012
Сообщений: 28
02.03.2014, 17:44  [ТС]
insite2012, Огромная Вам благодарность.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.03.2014, 17:44
Помогаю со студенческими работами здесь

Для нестатического поля, метода или свойства требуется ссылка на объект
Мне нужно передать массив в функцию, при передаче возникает ошибка( в мейне), в это же время при вызове функции в самой функции ошибки нет....

Для нестатического поля, метода или свойства требуется ссылка на объект
Нужно ввести переменную К, попробовал сделать так, но ничего не получается. Что с этим можно сделать? private static double Y(int x) ...

Для нестатического поля, метода или свойства требуется ссылка на объект
Имеется 2 формы, необходимо, чтобы при нажатии на кнопку на Форме№2 совершилось действие на Форме№1 (что-то вроде ссылки на метод). ...

Для нестатического поля, метода или свойства требуется ссылка на объект
Всем доброго времени суток. Подскажите, пожалуйста, как исправить ошибку? Пробовал выносить методы get и put в отдельный класс, после...

Для нестатического поля, метода или свойства требуется ссылка на объект
public static void EndClient(Client client) { try { Client.end(); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru