Operator is i as w C#

Operator is i as w C#
Invictus95
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad 7 lat
  • Postów:41
0

Mógłby ktoś mi wytłumaczyć bardziej dosadnie kiedy, co, jak i gdzie?

Mam ciężką głowę do tego a niestety wszelkie tłumaczenia są dla mnie niejasne.


Jestem żonaty
SO
  • Rejestracja:ponad 10 lat
  • Ostatnio:około rok
3

Ty tak na serio, że wszelkie tłumaczenia są niejasne?

is sprawdza czy zmienna jest danego typu, a as rzutuje na dany typ jeśli to możliwe, w przeciwnym wypadku zwraca null.

Invictus95
Jak coś ciężej mi zrozumieć to pytam was oczywiście po przeczytaniu w internecie. Kto pyta nie błądzi, myślałem że forum jest od zadawania pytań a dział Newbie od tych najbardziej prostych ;) A za odpowiedź ze szczerego serca dziękuję.
SO
No tak, ale tutaj nie ma nic skomplikowanego. To proste operatory i na każdej stronie znajdziesz identyczne wyjaśnienia.
Invictus95
NeuroXiq podał mi bardzo dla mnie wyjaśniający przykład, teraz to już nie ma nic skomplikowanego w tym. Zapomniał wół jak cielęciem był?
SO
Akurat tamten przykład bardziej wyjaśnia dziedziczenie niż is i as bo nawet nie ma tam wzmianki o tym, że as zwraca nulla w przeciwieństwie do zwykłego rzutowania, które rzuca exception jak konwersja nie jest możliwa.
NeuroXiq
  • Rejestracja:około 9 lat
  • Ostatnio:ponad 5 lat
  • Lokalizacja:Racibórz
  • Postów:101
2

Możesz też rzucić okiem na to :

Kopiuj
 class Program
    {
        static void Main(string[] args)
        {
            Cat cat = new Cat();
            Dog dog = new Dog();

            Car car = new Car();
            //?
            Console.WriteLine(cat is Animal);
            Console.WriteLine(dog is Animal);
            Console.WriteLine(car is Animal);
            //--
            Console.WriteLine(car is Vehicle);
            //?

            cat.poleAnimal1 = "poleAnimal1";
            cat.poleCat = "poleCat";
            //z dog tak samo

            /*
             * Zwróć uwagę, że Dog i Cat dziedzicząc mają dostęp do pola klasy bazowej (poleAnimal1)
             * */

            //animal ma tylko dostep do swojego pola
            Animal animal = new Animal();
            animal.poleAnimal1 = "asdf";

            //Jeżeli używamy as to rzutuje się jedną klasę na drugą
            //Dla przykładu:

            Cat cat2 = new Cat();
            Animal animal2 = cat2 as Animal;

            animal2.poleAnimal1 = "asdf";// ok -> cat2 'jest teraz' animal
            animal2.poleCat = "asdfg";//nie ok -> cat2 jest traktowane jak animal więc nie ma dostępu do swoich pól/metod.

        }
    }
    class Animal
    {
        public string poleAnimal1;   
    }

    class Dog : Animal
    {
        public string poleDog;
    }

    class Cat : Animal
    {
        public string poleCat;
    }

    class Vehicle
    {
        public string poleVehicle;
    }

    class Car : Vehicle
    {
        public string poleCar;
    }

Zastanów się co wypisze konsola.

SO
Słaby przykład. On nie pyta co to jest dziedziczenie i jak działa tylko czym się różni is od as.
Invictus95
Ooooo to takie coś mi chodziło bardzo rozjaśniłeś mi temat dziękuję bardzo :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.