How to use base class & child class as parameter in one function ?
Vinod K Chandran
kcvinu82 at gmail.com
Fri May 22 20:04:24 UTC 2020
On Friday, 22 May 2020 at 16:12:12 UTC, Steven Schveighoffer
wrote:
> On 5/22/20 9:10 AM, Vinod K Chandran wrote:
>> On Friday, 22 May 2020 at 12:21:25 UTC, rikki cattermole wrote:
>>> if (Child child = cast(Child)parent) {
>>> assert(child !is null);
>>> }
>>
>> Actually, problem occurs in addHandler function. It expects an
>> argument of type "EventArgs", not MouseEventArgs.
>
> Yes, because what if you did this with your function:
>
> fnp(new EventArgs(...));
>
> It would be called with the type being implicitly cast to the
> child type without that being true.
>
> What Rikki was recommending is that you write your handler like
> this:
>
> void onClick(EventArgs e){
> if(auto me = cast(MouseEventArgs)e) {
> log("form clicked on x = ", me.x, ", and y = ", me.y);
> }
> }
>
> Actually, if you are certain it's a programming error for
> onClick to be called with a different type of event args, I'd
> do:
>
> void onClick(EventArgs e){
> auto me = cast(MouseEventArgs)e;
> assert(me !is null, "Error, onClick called with invalid
> event type");
> log("form clicked on x = ", me.x, ", and y = ", me.y);
> }
Thanks for the answer. I understand that, in D, derived class and
base class are not the same as in vb.net or any other language.
(Please correct me if i am wrong).
In vb.net, assume that i have a class setup like this--
Public Class Base
Public Property SampleInt As Integer
End Class
Public Class Child : Inherits Base
Public Property SampleDouble As Double
End Class
//Assume that i have a list of Base class like this--
Dim sampleList As New List(Of Base)
// Now, i can use this list like this--
sampleList.Add(New Child(10.5)) Is this possible in D without
casting ?
More information about the Digitalmars-d-learn
mailing list