CannibalSmith ([info]cannibalsmith) rakstīja [info]koderi kopienā,
@ 2009-03-12 16:56:00

Previous Entry  Add to memories!  Tell a Friend!  Next Entry
.net un eventi
C# viss kompilējas. Vai patterns pareizi uzrakstīts?
using System.ComponentModel;

public class Zomg : INotifyPropertyChanged
{
	public event EventHandler Gloop;
	public event PropertyChangedEventHandler PropertyChanged;
	
	protected void OnGloop(EventArgs e)
	{
		if (Gloop != null) Gloop(this, e);
	}
	
	protected void OnPropertyChanged(PropertyChangedEventArgs e)
	{
		if (PropertyChanged != null) PropertyChanged(this, e);
	}
}

C++/CLI nez kamdēļ kliedz, ka kaut kādas add un remove funkcijas nav implementētas PropertyChangedEventHandler eventam. Vai patterns pareizi uzrakstīts?
using namespace System::ComponentModel;

publc ref class Zomg : public INotifyPropertyChanged
{
public:
	event EventHandler^ Gloop;
	virtual event PropertyChangedEventHandler^ PropertyChanged; // virtual keywordu vajadzēja!
	
protected:
	virtual void OnGloop(EventArgs^ e)
	{
		Gloop(this, e);
	}
	
	virtual void OnPropertyChanged(PropertyChangedEventArgs^ e)
	{
		PropertyChanged(this, e);
	}
};


(Ierakstīt jaunu komentāru)


[info]bubu
2009-03-12 18:25 (saite)
Esi pārliecināts, ka kļūdu saka par PropertyChangedEventHandler?

Tam INotifyPropertyChanged interfeisam jau vajag PropertyChanged eventu implementēt. Tavā kodā arī C# kodam nevajadzētu kompilēties.

(Atbildēt uz šo) (Diskusija)


[info]cannibalsmith
2009-03-12 18:31 (saite)
Kļūda, rakstot piemēru. Poop vietā ieliec PropertyChanged.

(Atbildēt uz šo) (Iepriekšējais) (Diskusija)


[info]bubu
2009-03-12 18:44 (saite)
Joprojām tev tur gļuki - atgriežamos tipus vajag par void uzlikt :)
Un katrā ziņā man warningu (pirms kļūdas) saka visai skaidru, kur ir problēma:
Zomg::PropertyChanged::add requires 'virtual' keyword to implement the interface method...

Tā ka pieliec vien virtual un viss būs.

(Atbildēt uz šo) (Iepriekšējais) (Diskusija)


[info]cannibalsmith
2009-03-12 19:01 (saite)
Ghh, es nemāku norakstīt. Ir man tur virtual.

(Atbildēt uz šo) (Iepriekšējais)


[info]cannibalsmith
2009-03-12 19:02 (saite)
virtual event, lol! paldies!

(Atbildēt uz šo) (Iepriekšējais) (Diskusija)


[info]bubu
2009-03-12 19:11 (saite)
Un kurš uz nullptr pārbaudīs eventu mainīgos C++/CLI kodā?

(Atbildēt uz šo) (Iepriekšējais) (Diskusija)


[info]cannibalsmith
2009-03-12 19:28 (saite)
Kad es rakstu if (PropertyChanged != nullptr), viņš kliedz, ka usage requires 'Application1::Zomg::PropertyChanged' to be a data member.

(Atbildēt uz šo) (Iepriekšējais) (Diskusija)


[info]bubu
2009-03-12 19:33 (saite)
Ah pareiz, piemirsu. Uz nepiešķirtu eventu vajadzēja pārbaudīt MC++'ā (.NET 1.1). C++/CLI vairs nevajag - viss notiksies automātiski.

(Atbildēt uz šo) (Iepriekšējais)


[info]zverj
2009-03-12 18:36 (saite)
Mazliet offtopika. Vai vari parādīt dzīves piemēru, kam kaut kas tāds ir vajadzīgs?

(Atbildēt uz šo) (Diskusija)


[info]cannibalsmith
2009-03-12 19:03 (saite)
Tu par INotifyPropertyChanged interfeisu?

(Atbildēt uz šo) (Iepriekšējais) (Diskusija)


[info]zverj
2009-03-12 22:36 (saite)
Kaut vai. Kaut

(Atbildēt uz šo) (Iepriekšējais) (Diskusija)


[info]cannibalsmith
2009-03-12 23:02 (saite)
INotifyPropertyChanged tu izmanto, lai Binding varētu sekot līdzi propertijas izmaiņām. Tas viss ir no jaunā .NET 3.0 Windows Presentation Foundation, kur tu GUI veido deklaratīvi kā weblapu un Binding ir viens no mehānismiem, kā tu savieno savas klases ar interfeisa elementiem.

(Atbildēt uz šo) (Iepriekšējais)


Neesi iežurnalējies. Iežurnalēties?