Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > С#

С# Средство разработки на платформе .Net

Ответ
 
Опции темы
Старый 01.04.2011, 11:41   #1
Nazgul
Нуждающийся
 
Регистрация: 14.01.2011
Сообщений: 72
Написано 9 полезных сообщений
(для 44 пользователей)
Краткая запись реализации абстрактного класса

В языке Java можно написать так (могу чуть ошибится):
JButton button JButton("Привет");
button.addActionListener(new AbstractAction(){
     
void actionPerformed(){
          
//какие-то действия
     
}
}); 
Я так же пробовал написать на C# - выдает ошибку. Как это правильно написать на C#?
(Offline)
 
Ответить с цитированием
Старый 01.04.2011, 11:52   #2
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Краткая запись реализации абстрактного класса

Вот так в windows forms:

using System;
using System.Windows.Forms;

namespace 
WindowsFormsApplication2
{
    public 
partial class Form1 Form
    
{
        public 
Form1()
        {
            
InitializeComponent();
        }

        private 
void Form1_Load(object senderEventArgs e)
        {
            
Button button = new Button();
            
button.Text "Привет";
            
button.Click += button_Click;
            
Controls.Add(button);
        }

        
void button_Click(object senderEventArgs e)
        {
            
MessageBox.Show("Пока");
        }
    }

про WPF ничего сказать не могу, не владею

можно короче:
using System;
using System.Windows.Forms;

namespace 
WindowsFormsApplication2
{
    public 
partial class Form1 Form
    
{
        public 
Form1()
        {
            
InitializeComponent();
        }

        private 
void Form1_Load(object senderEventArgs e)
        {
            
Button button = new Button();
            
button.Text "Привет";
            
button.Click += (sea) => MessageBox.Show("Пока");
            
Controls.Add(button);
        }
    }

Можно еще вот так:
using System;
using System.Windows.Forms;

namespace 
WindowsFormsApplication2
{
    public 
partial class Form1 Form
    
{
        public 
Form1()
        {
            
InitializeComponent();
        }

        private 
void Form1_Load(object senderEventArgs e)
        {
            
Button button = new Button {Text "Привет"};
            
button.Click += (sea) => MessageBox.Show("Пока");
            
Controls.Add(button);
        }
    }

(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
HolyDel (02.04.2011), moka (01.04.2011)
Старый 01.04.2011, 12:01   #3
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Краткая запись реализации абстрактного класса

ой мне кажется я не дочитал...
(Offline)
 
Ответить с цитированием
Старый 01.04.2011, 12:07   #4
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Краткая запись реализации абстрактного класса

В C# есть анонимные классы, но с ними работать можно только в той же функции:
int[] ints = new int[]{1,2,3,4,5,6};

var 
anonimous ints.Select(=> new {integer tdbl = (double) tt2 t*t});

foreach (var 
anonim in anonimous)
{
       
Console.WriteLine("integer = {0}, dbl = {1}, t^2 = {2}"anonim.integeranonim.dblanonim.t2);

Но эти анонимные классы часто используются совместно с linq или рефлексией

т.е. создается так:
var anonim = new {свойство значениесвойство 2 значение, ...} 
Читать об этом тут: http://msdn.microsoft.com/ru-ru/library/bb397696.aspx
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
HolyDel (03.04.2011)
Старый 01.04.2011, 12:28   #5
Nazgul
Нуждающийся
 
Регистрация: 14.01.2011
Сообщений: 72
Написано 9 полезных сообщений
(для 44 пользователей)
Ответ: Краткая запись реализации абстрактного класса

А краткой записи как в Java вообще нету что-ли?
Кстати, надо это в Unity
(Offline)
 
Ответить с цитированием
Старый 01.04.2011, 13:07   #6
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Краткая запись реализации абстрактного класса

Других возможностей нету, это не Java. Либо я не понимаю вопроса.
(Offline)
 
Ответить с цитированием
Старый 01.04.2011, 16:39   #7
Nazgul
Нуждающийся
 
Регистрация: 14.01.2011
Сообщений: 72
Написано 9 полезных сообщений
(для 44 пользователей)
Ответ: Краткая запись реализации абстрактного класса

Смысл в том, что создается экземпляр абстрактного класса и сразу же определяются все его абстрактные методы. Жаль, что в C# этого нет
(Offline)
 
Ответить с цитированием
Старый 01.04.2011, 17:20   #8
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Краткая запись реализации абстрактного класса

Собственно со строгой типизацией этого не может быть. То что есть анонимные классы сейчас - уже неплохо.
(Offline)
 
Ответить с цитированием
Старый 02.04.2011, 12:36   #9
Sef
ПроЭктировщик
 
Аватар для Sef
 
Регистрация: 05.04.2007
Сообщений: 96
Написано 77 полезных сообщений
(для 232 пользователей)
Ответ: Краткая запись реализации абстрактного класса

А если просто написать так:

public class Button
{
//bla-bla-bla
}

public class 
JButton Button
{
     public 
void actionPerformed(){
          
//какие-то действия
     
}
}
///////

public class Main
{
     
JButton button JButton("Привет");
     
button.actionPerformed();

Если тоже правильно понял задачу
(Offline)
 
Ответить с цитированием
Старый 02.04.2011, 16:12   #10
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Краткая запись реализации абстрактного класса

Sef, там про событие речь была, и суть в том, что для события обозначить сразу же функцию. В JavaScript это кстати популярный метод описания функций событий.
Я в C# не встречал, и считаю это не хорошим методом объявления функций для событий, плохо масштабируемо, и если есть появится другой объект с необходимостью такого же события, придётся всё равно выносить в отдельную функцию.
(Offline)
 
Ответить с цитированием
Старый 02.04.2011, 16:22   #11
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Краткая запись реализации абстрактного класса

Эмм ничего не понял из вышесказанного )

Речь шла о анонимных классах - создании таких классов непосредственно в коде функции. В C# есть анонимные классы, но возможности их ограничены. Они подходят для создания коллекции свойств чего-то, например для получения из базы данных нужных полей.

По аналогии я бы мог предложить использовать делегаты:
using System;
using System.Windows.Forms;

namespace 
WindowsFormsApplication2
{
    public 
partial class Form1 Form
    
{
        public 
Form1()
        {
            
InitializeComponent();
        }

        private 
void Form1_Load(object senderEventArgs e)
        {
            
Button button = new Button {Text "Привет"};
            
button.Click += 
                
delegate(object sEventArgs ea)
                   {
                       
MessageBox.Show("Пока!");
                   };
            
Controls.Add(button);
        }
    }

Но это тоже самое, что и использование лямбда выражений, которое я уже приводил:
button.Click += (sea) => { MessageBox.Show("Пока"); }; 
(Offline)
 
Ответить с цитированием
Старый 02.04.2011, 17:18   #12
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Краткая запись реализации абстрактного класса

Думаю наименование топика и кода из первого поста, складывается впечатление, что автору нужно тупо описать функции при присваивании к событию. А не абстрактные классы или т.п.
(Offline)
 
Ответить с цитированием
Старый 02.04.2011, 17:46   #13
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Краткая запись реализации абстрактного класса

Судя по седьмому посту не совсем, но я думаю мой 11-й пост как раз то что ему нужно.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
moka (02.04.2011)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 23:27.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com