forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   С# (http://forum.boolean.name/forumdisplay.php?f=128)
-   -   Краткая запись реализации абстрактного класса (http://forum.boolean.name/showthread.php?t=14507)

Nazgul 01.04.2011 11:41

Краткая запись реализации абстрактного класса
 
В языке Java можно написать так (могу чуть ошибится):
PHP код:

JButton button JButton("Привет");
button.addActionListener(new AbstractAction(){
     
void actionPerformed(){
          
//какие-то действия
     
}
}); 

Я так же пробовал написать на C# - выдает ошибку. Как это правильно написать на C#?

pax 01.04.2011 11:52

Ответ: Краткая запись реализации абстрактного класса
 
Вот так в windows forms:

PHP код:

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 ничего сказать не могу, не владею

можно короче:
PHP код:

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);
        }
    }


Можно еще вот так:
PHP код:

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);
        }
    }



pax 01.04.2011 12:01

Ответ: Краткая запись реализации абстрактного класса
 
ой мне кажется я не дочитал...

pax 01.04.2011 12:07

Ответ: Краткая запись реализации абстрактного класса
 
В C# есть анонимные классы, но с ними работать можно только в той же функции:
PHP код:

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 или рефлексией

т.е. создается так:
PHP код:

var anonim = new {свойство значениесвойство 2 значение, ...} 

Читать об этом тут: http://msdn.microsoft.com/ru-ru/library/bb397696.aspx

Nazgul 01.04.2011 12:28

Ответ: Краткая запись реализации абстрактного класса
 
А краткой записи как в Java вообще нету что-ли?
Кстати, надо это в Unity:)

pax 01.04.2011 13:07

Ответ: Краткая запись реализации абстрактного класса
 
Других возможностей нету, это не Java. Либо я не понимаю вопроса.

Nazgul 01.04.2011 16:39

Ответ: Краткая запись реализации абстрактного класса
 
Смысл в том, что создается экземпляр абстрактного класса и сразу же определяются все его абстрактные методы. Жаль, что в C# этого нет:(

pax 01.04.2011 17:20

Ответ: Краткая запись реализации абстрактного класса
 
Собственно со строгой типизацией этого не может быть. То что есть анонимные классы сейчас - уже неплохо.

Sef 02.04.2011 12:36

Ответ: Краткая запись реализации абстрактного класса
 
А если просто написать так:

PHP код:

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

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

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


Если тоже правильно понял задачу :)

moka 02.04.2011 16:12

Ответ: Краткая запись реализации абстрактного класса
 
Sef, там про событие речь была, и суть в том, что для события обозначить сразу же функцию. В JavaScript это кстати популярный метод описания функций событий.
Я в C# не встречал, и считаю это не хорошим методом объявления функций для событий, плохо масштабируемо, и если есть появится другой объект с необходимостью такого же события, придётся всё равно выносить в отдельную функцию.

pax 02.04.2011 16:22

Ответ: Краткая запись реализации абстрактного класса
 
Эмм ничего не понял из вышесказанного )

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

По аналогии я бы мог предложить использовать делегаты:
PHP код:

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);
        }
    }


Но это тоже самое, что и использование лямбда выражений, которое я уже приводил:
PHP код:

button.Click += (sea) => { MessageBox.Show("Пока"); }; 


moka 02.04.2011 17:18

Ответ: Краткая запись реализации абстрактного класса
 
Думаю наименование топика и кода из первого поста, складывается впечатление, что автору нужно тупо описать функции при присваивании к событию. А не абстрактные классы или т.п.

pax 02.04.2011 17:46

Ответ: Краткая запись реализации абстрактного класса
 
Судя по седьмому посту не совсем, но я думаю мой 11-й пост как раз то что ему нужно.


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot