Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.08.2012, 14:58   #1
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию Вызов методов шаблонного класса.

Почему во второй проверке на равенство вызывается не определённый мной метод Equals?

Код:
 class Container : IEquatable<Container>
    {
        public string data { get; set; }
        public bool Equals(Container c)
        {
            return data == c.data;             
        }
    }

    class CheckEqual<T>
    {
        static public void equals(T t, T t2)
        {
            Console.WriteLine(t.Equals(t2));
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Container c1 = new Container() { data = "1" };
            Container c2 = new Container() { data = "1" };
            Console.WriteLine(c1.Equals(c2)); // True
            CheckEqual<Container>.equals(c1, c2); // False // почему тут вызывается не определённый мной метод Equals
            Console.ReadKey();
        }
    }
the_deer_one вне форума Ответить с цитированием
Старый 13.08.2012, 15:14   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а ничего что не переопределяете Equals, а скрываете?
где override?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 13.08.2012, 17:22   #3
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию

А всего то надо было указать интерфейс для шаблонного класса, иначе вызывается версия Object.Equals. Я перепутал шарп с руби короче.
class CheckEqual<T> where T : IEquatable<T>

Пепел Феникса
Цитата:
где override?
Так я ничего не переопределяю.
the_deer_one вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Один и тот же код на С++ и С#, Шаблоны, отображение содержимого шаблонного класса pinkiller Общие вопросы .NET 2 01.06.2012 12:22
наследник шаблонного класса Rayzor Общие вопросы C/C++ 9 03.05.2012 16:50
Вызов методов вебсервиса zigler Visual C++ 1 26.02.2012 19:37
Конструктор шаблонного класса Hemul Общие вопросы C/C++ 1 01.07.2011 20:21
С++ перегрузка операций для шаблонного класса TIN Помощь студентам 7 29.03.2009 15:24