Witam, mam dwa problemy, w jednym z przykładów, aby uniknąć późniejszego rzutowania zastosowano takie rozwiązanie
class myclass: ICloneable
{
public string imie;
public string Imie
{
get
{
return imie;
}
set
{
imie = value;
}
}
object ICloneable.Clone()
{
Console.WriteLine("z interfejsu");
return this.Clone();
}
public myclass Clone()
{
Console.WriteLine("tu");
return (myclass)this.MemberwiseClone();
}
}
Czemu wyświetli się na konsoli tylko słowo "tu" bez "z interfejsu"? Jeśli się nie mylę to jest to jawna implementacja(ICloneable.Clone()) także jest prywatna i nie da się jej wywołać z zewnątrz także w którym momencie jest ona uruchamiana, bo musi się tak dziać skoro program działa?
Drugie pytanie to czemu mogę utworzyć obiekt interfejsu np.
ICloneable obiekt = new ICloneable();
lecz jeśli zadeklaruję własny interfejs to wówczas nie będę mógł utworzyć nowego a jedynie przypisać do obiektu, którego klasa dziedziczy po nim np.
interface my_interface
{
...
}
class myclass:my_interface
{
...
public static void Main()
{
myclass obiekt1 = new myclas();
my_interface my_inter = new my_interface(); // błąd
my_interface my_inter = obiekt1; //poprawnie