Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Делегаты как свойства, (помогите разобраться с ошибкой) 
V
    Опции темы
kuller
Дата 10.6.2009, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 15.11.2007

Репутация: нет
Всего: нет



Здравствуйте!!!

Значит была у нас в универе тема "Делегаты как свойства" ... ну вот попытался данный материал дома реализовать. Сделал вроде все как нам давали:

Код

namespace Delegati_kak_svoystva_klasswork_
{
    class Program
    {
        static void Main(string[] args)
        {
            Persons persons = new Persons();
            persons.LoadPersons();
            Console.WriteLine("    Сортировка по имени: ");
            persons.SimpleSortPerson(Person.SortByName);
            persons.PrintPersons();
            Console.WriteLine("    Сортировка по возрасту: ");
            persons.SimpleSortPerson(Person.SortByAge);
            persons.PrintPersons();
            Console.WriteLine("    Сортировка по зарплате и имени: ");
            persons.SimpleSortPerson(Person.SortByOkladName);
            persons.PrintPersons();
        }
    }
    public class Person
    {
        public string name;
        public int age;
        public float oklad;
        public Person() { }
        public Person(string a, int b, float c)
        {
            name = a;
            age = b;
            oklad = c;
        }
        public Person(Person p)
        {
            name = p.name;
            age = p.age;
            oklad = p.oklad;
        }
        private static int CompareName(Person obj1, Person obj2)
        {
            return (string.Compare(obj1.name, obj2.name));
        }
        private static int CompareAge(Person obj1, Person obj2)
        {
            if (obj1.age > obj2.age)
                return (1);
            else
                if (obj1.age < obj2.age)
                    return (-1);
                else
                    return (0);
        }
        private static int CompareOkladName(Person obj1, Person obj2)
        {
            if (obj1.oklad > obj2.oklad)
                return (1);
            else
                if (obj1.oklad < obj2.oklad)
                    return (-1);
                else
                    if (obj1.oklad == obj2.oklad)
                        return (CompareName(obj1, obj2));
        }
        public static Persons.CompareItems SortByName
        {
            get { return (new Persons.CompareItems(CompareName)); }
        }
        public static Persons.CompareItems SortByAge
        {
            get { return (new Persons.CompareItems(CompareAge)); }
        }
        public static Persons.CompareItems SortByOkladName
        {
            get { return (new Persons.CompareItems(CompareOkladName)); }
        }
    }

    class Persons
    {    //контейнер объектов Person
        //делегат
        public delegate int CompareItems(Person obj1, Person obj2);
        private int freeItem = 0;
        const int n = 100;
        private Person[] persons = new Person[n];
       
        //индексатор
        public Person this[int num]
        {
            get { return (persons[num - 1]); }
            set { persons[num - 1] = value; }
        }

        public void AddPerson(Person pers)
        {
            if (freeItem < n)
            {
                Person p = new Person(pers);
                persons[freeItem++] = p;
            }
            else Console.WriteLine("Не могу добавить Person");
        }
        //загрузка
        public void LoadPersons()
        {
            AddPerson(new Person("Соколов", 123, 750.0));
            AddPerson(new Person("Синицын", 128, 850.0));
            AddPerson(new Person("Воробьев", 223, 750.0));
            AddPerson(new Person("Орлов", 129, 800.0));
            AddPerson(new Person("Соколов", 133, 1750.0));
            AddPerson(new Person("Орлов", 119, 750.0));
        }
        //вывод на экран
        public void PrintPersons()
        {
            for (int i = 0; i < freeItem; i++)
            {
                Console.WriteLine("{0,10} {1,5} {2,5}",
                persons[i].Name, persons[i].age, persons[i].oklad);
            }
        }

        //сортировка
        public void SimpleSortPerson(CompareItems compare)
        {
            Person temp = new Person();
            for (int i = 1; i < freeItem; i++)
                for (int j = freeItem - 1; j >= i; j--)
                    if (compare(persons[j], persons[j - 1]) == -1)
                    {
                        temp = persons[j - 1];
                        persons[j - 1] = persons[j];
                        persons[j] = temp;
                    }
        }
    }
}


пробую откомпилировать выдает 3 ошибки:

Код

Error    1    Inconsistent accessibility: property type 'Delegati_kak_svoystva_klasswork_.Persons.CompareItems' is less accessible than property 'Delegati_kak_svoystva_klasswork_.Person.SortByName'

Error    2    Inconsistent accessibility: property type 'Delegati_kak_svoystva_klasswork_.Persons.CompareItems' is less accessible than property 'Delegati_kak_svoystva_klasswork_.Person.SortByAge'    

Error    3    Inconsistent accessibility: property type 'Delegati_kak_svoystva_klasswork_.Persons.CompareItems' is less accessible than property 'Delegati_kak_svoystva_klasswork_.Person.SortByOkladName'


Помогите разобраться в чем дело.

Заранее спасибо!!!
PM MAIL   Вверх
DVariuS
Дата 10.6.2009, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 10.2.2009
Где: Ukraine

Репутация: 2
Всего: 8



kuller, ну для начала сделай делегат CompareItems, объявленный в классе Persons, доступным классу Person. Например, объявив класс Persons как public.
PM MAIL   Вверх
kuller
Дата 10.6.2009, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 15.11.2007

Репутация: нет
Всего: нет



DVariuS, о спасибо!!!!!

сделал:

Код

public class Person


и все заработало!!!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0450 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.