[ LSDCracker @ 19.08.2008. 20:28 ] @
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Subclassing
{
class Program
{
static void Main(string[] args)
{
Rottweiler butch = new Rottweiler("Butch") as Dog;
Spaniel mac = new Spaniel("Mac", "yips") as Dog;
butch.Bark();
mac.Bark();
butch.DoYourThing();
mac.DoYourThing();
}
}
class Dog
{
protected string _name;
protected string _sound;
public Dog(string name)
{
_name = name;
_sound = "barks";
}
public Dog(string name, string sound)
{
_name = name;
_sound = sound;
}
public void Bark()
{
Console.WriteLine("{0} {1} at you", _name, _sound);
}
public virtual void DoYourThing()
{
}
}
class Rottweiler : Dog
{
public Rottweiler(string name) : base(name) { }
public Rottweiler(string name, string sound) : base(name, sound) { }
public override void DoYourThing()
{
Console.WriteLine("{0} snarls at you, in a very menacing fashion!", _name);
}
}
class Spaniel : Dog
{
public Spaniel(string name) : base(name) { }
public Spaniel(string name, string sound) : base(name, sound) { }
public override void DoYourThing()
{
Console.WriteLine("{0} drools all over you, then licks you into submission!", name);
}
}
}



Prijavljuje mi problem, kaze da li vam nedostaje kastovanje...
Error 1 Cannot implicitly convert type 'Subclassing.Dog' to 'Subclassing.Rottweiler'. An explicit conversion exists (are you missing a cast?) D:\Documents and Settings\LIVADA\Local Settings\Application Data\Temporary Projects\ConsoleApplication1\Program.cs 12 32 ConsoleApplication1
Neko objasnjenje?
[ mmix @ 19.08.2008. 21:28 ] @
Code:

Rottweiler butch = new Rottweiler("Butch") as Dog;
Spaniel mac = new Spaniel("Mac", "yips") as Dog;


Ovo ne moze ovako, polimorfizam ne funkcionise u tom smeru, implicitni cast ide ka nasledjenoj klasi (as Dog ti nije potrebno):

Code:

Dog butch = new Rottweiler("Butch");
Doc mac = new Spaniel("Mac", "yips");
[ LSDCracker @ 20.08.2008. 01:17 ] @
E hvala ti, ma ovo mi kod iz tuta jednog i sad ono ne kapiram zasto ne radi, posto nikako ne kapiram sta zapravo sta radi, a najbolje ucim kad pokrenem program i onda eksperementisem, medjutim nije hteo da radi...
Sad ima jos jedan problem, pomalo nelogican...
Error 1 The name 'name' does not exist in the current context D:\Documents and Settings\LIVADA\Local Settings\Application Data\Temporary Projects\ConsoleApplication1\Program.cs 59 77 ConsoleApplication1

Code:
 class Spaniel : Dog
    {
        public Spaniel(string name) : base(name) { }
        public Spaniel(string name, string sound) : base(name, sound) { }
        public override void DoYourThing()
        {
            Console.WriteLine(
                "{0} drools all over you, then licks you into submission!", name);
        }
    }


Sad kao on ne postoji il sta vec...
Probao sam da promenim da bude kao i u prethodnoj klasi sa _, ali ne radi....

E sta zapravo znaci ta _ (donja crta pored promenjive)??
Prvi put vidim upotrebu nje u programskom kodu, pa sam pomalo zbunjen, a verovatno ima veliku primenu...
[ mmix @ 20.08.2008. 08:42 ] @
Nema nikakvu primenu, samo je validan karakter za identifikator pa moze da se koristi u istom, ne vuce sa sobom nikakvo posebno procesiranje.

Greska tu javlja zato sto je u baznoj klasi deklarisan _name a ti u Spaniel.DoYourThing koristis name, koji naravno ne postoji. Treba da promenis samo tu u _name, slicno kao sto je u Rtowailer klasi.
[ LSDCracker @ 20.08.2008. 17:07 ] @
Pa ja sam to i pokusao i nije radilo, sad nekako iznenada proradi.
Hvala puno, mislio sam da ova donja crta ima neko znacenje al nista zapravo ne radi prosto ime promenjive.