|
С# Средство разработки на платформе .Net |
01.04.2011, 11:41
|
#1
|
Нуждающийся
Регистрация: 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
|
Unity/C# кодер
Регистрация: 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 sender, EventArgs e) { Button button = new Button(); button.Text = "Привет"; button.Click += button_Click; Controls.Add(button); }
void button_Click(object sender, EventArgs 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 sender, EventArgs e) { Button button = new Button(); button.Text = "Привет"; button.Click += (s, ea) => 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 sender, EventArgs e) { Button button = new Button {Text = "Привет"}; button.Click += (s, ea) => MessageBox.Show("Пока"); Controls.Add(button); } } }
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
|
|
01.04.2011, 12:01
|
#3
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Краткая запись реализации абстрактного класса
ой мне кажется я не дочитал...
|
(Offline)
|
|
01.04.2011, 12:07
|
#4
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Краткая запись реализации абстрактного класса
В C# есть анонимные классы, но с ними работать можно только в той же функции:
int[] ints = new int[]{1,2,3,4,5,6};
var anonimous = ints.Select(t => new {integer = t, dbl = (double) t, t2 = t*t});
foreach (var anonim in anonimous) { Console.WriteLine("integer = {0}, dbl = {1}, t^2 = {2}", anonim.integer, anonim.dbl, anonim.t2); }
Но эти анонимные классы часто используются совместно с linq или рефлексией
т.е. создается так:
var anonim = new {свойство = значение, свойство 2 = значение, ...}
Читать об этом тут: http://msdn.microsoft.com/ru-ru/library/bb397696.aspx
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
01.04.2011, 12:28
|
#5
|
Нуждающийся
Регистрация: 14.01.2011
Сообщений: 72
Написано 9 полезных сообщений (для 44 пользователей)
|
Ответ: Краткая запись реализации абстрактного класса
А краткой записи как в Java вообще нету что-ли?
Кстати, надо это в Unity
|
(Offline)
|
|
01.04.2011, 13:07
|
#6
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Краткая запись реализации абстрактного класса
Других возможностей нету, это не Java. Либо я не понимаю вопроса.
|
(Offline)
|
|
01.04.2011, 16:39
|
#7
|
Нуждающийся
Регистрация: 14.01.2011
Сообщений: 72
Написано 9 полезных сообщений (для 44 пользователей)
|
Ответ: Краткая запись реализации абстрактного класса
Смысл в том, что создается экземпляр абстрактного класса и сразу же определяются все его абстрактные методы. Жаль, что в C# этого нет
|
(Offline)
|
|
01.04.2011, 17:20
|
#8
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Краткая запись реализации абстрактного класса
Собственно со строгой типизацией этого не может быть. То что есть анонимные классы сейчас - уже неплохо.
|
(Offline)
|
|
02.04.2011, 12:36
|
#9
|
ПроЭктировщик
Регистрация: 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
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Краткая запись реализации абстрактного класса
Sef, там про событие речь была, и суть в том, что для события обозначить сразу же функцию. В JavaScript это кстати популярный метод описания функций событий.
Я в C# не встречал, и считаю это не хорошим методом объявления функций для событий, плохо масштабируемо, и если есть появится другой объект с необходимостью такого же события, придётся всё равно выносить в отдельную функцию.
|
(Offline)
|
|
02.04.2011, 16:22
|
#11
|
Unity/C# кодер
Регистрация: 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 sender, EventArgs e) { Button button = new Button {Text = "Привет"}; button.Click += delegate(object s, EventArgs ea) { MessageBox.Show("Пока!"); }; Controls.Add(button); } } }
Но это тоже самое, что и использование лямбда выражений, которое я уже приводил:
button.Click += (s, ea) => { MessageBox.Show("Пока"); };
|
(Offline)
|
|
02.04.2011, 17:18
|
#12
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Краткая запись реализации абстрактного класса
Думаю наименование топика и кода из первого поста, складывается впечатление, что автору нужно тупо описать функции при присваивании к событию. А не абстрактные классы или т.п.
|
(Offline)
|
|
02.04.2011, 17:46
|
#13
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Краткая запись реализации абстрактного класса
Судя по седьмому посту не совсем, но я думаю мой 11-й пост как раз то что ему нужно.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 15:35.
|