동물 유형의 목록이 있다고 가정하고 cat 및 dog 유형의 개체를 추가한다고 가정 해 보겠습니다. 고양이와 개 모두 동물을 물려받으며 각각은 자신 만의 분야를 가지고 있습니다.C# 상속 다시 캐스팅
해당 목록에서 해당 개체를 다시 가져 와서 원래의 고양이 또는 개 유형의 Animal로 다시 캐스팅하면 해당 필드가 손실됩니까?
동물 유형의 목록이 있다고 가정하고 cat 및 dog 유형의 개체를 추가한다고 가정 해 보겠습니다. 고양이와 개 모두 동물을 물려받으며 각각은 자신 만의 분야를 가지고 있습니다.C# 상속 다시 캐스팅
해당 목록에서 해당 개체를 다시 가져 와서 원래의 고양이 또는 개 유형의 Animal로 다시 캐스팅하면 해당 필드가 손실됩니까?
여전히 유형 고양이 또는 개의 객체 저장 개체 번호
는, 그들은 단지 일시적으로 폭 넓은 유형 "동물"로 취급되고있다. 당신이 그들을 꺼내어 올바른 유형으로 그들을 성공적으로 던지면 그들은 항상 가지고 있었던 모든 데이터를 볼 수있을 것입니다.아니요. 개체 자체는 항상 같은 형식입니다. 평생 동안 중반에 유형을 변경하지 않습니다. 특정 상황 (목록과 같은)에서 다른 유형으로 취급 될 수도 있지만 그 내용은 변경되지 않습니다.
귀하의 질문에 대한 답변은 아니요이며, 분명히 공개 회원 액세스 권한을 잃지 않습니다.
class MainClass
{
public static void Main (string[] args)
{
List<Animal> animals = new List<Animal>();
var dog = new Dog();
dog.BallsFetched = 5;
var cat = new Cat();
cat.MiceCaught = 23;
animals.Add(dog);
animals.Add (cat);
Console.WriteLine(((Cat)animals [0]).MiceCaught);
}
}
public class Animal{
public string Color;
public string Name;
}
public class Cat : Animal{
public int MiceCaught;
}
public class Dog : Animal{
public int BallsFetched;
}
또한 객체가 캐스팅하기 전에 특정 선언에 속하는지 확인하기 위해 is operator을 사용할 수 있습니다 여기에
은 예를의 작업을 구현 한 것입니다. 다른 유형으로을 캐스팅 할 때
기술적으로 당신은 객체 변환 .
double d = 123.456;
int i = (int)d; // d value is gone forever
double dd = (double)i; // you loose .456 part
그러나, 기본 클래스 (또는 인터페이스) 사실 변환 캐스팅의 경우에서와 발생하지. 이 경우에 캐스팅에 대해 생각해보십시오 (창 (;)을 통해서만) 해당 멤버 만, 새로운 유형이 정의하는 유형 (새 유형 = 기본 클래스) 만 볼 수있는 것처럼 생각하십시오. 다시 캐스팅되면 해당 창을 제거하고 전체 개체를 다시 볼 수 있습니다. 변경 유형에 캐스팅이 있지만이 예
public class A {}
public class B : A { public object B}
public class C : B { public object C; }
var c = new C() { B = 1, C = 2 };
에서
당신은var a = (A)c; // through A window - nothing is visible
var b = (B)a;
var test1 = b.B; // you can see something through B window, test1 = 1
var cc = (C)b;
var test2 = cc.C; // you can see everything again, test2 = 2
에 c
전송할 수 있습니다, 객체는 여전히 동일합니다. 아무것도 잃어 버리지 않는다.
'그 목록에서 물체를 가져 와서 처음에 있었던 것들로 다시 캐스팅하십시오. '....이 질문을하기 전에 해본 적이 있습니까? – ekad
당신은 아무 것도 잃지 않습니다. –
Rep-farmer bait. 어떤 사람들, 일하십시오! – Gusdor