다음과 같은 BL 클래스가 있습니다 : A, DTO 클래스 : DTO. 이제 DTO에 몇 가지 속성을 추가하려고한다고 가정합니다. 그래서 기존 DTO에서 새 DTO 클래스를 파생시키고 it.Below에 속성을 추가하는 코드입니다 :C# 다형성 문제
namespace TestConsole
{
class test
{
static void Main(string[] args)
{
B b = new B();
b.D.ID = 1;
b.D.Name = "4";
MyBLMethod(b);
}
static void MyBLMethod(A b)
{
MyDALMethod(b.D);
}
static void MyDALMethod(DTO dto)
{
int i = dto.ID;
string name = ((MyDTO)dto).Name;//I could not do this
//because i will get object cast error as i can't cast from
//parent to child
}
}
public class DTO
{
public int ID = 99;
public DTO()
{
}
public DTO(DTO source)
{
ID = source.ID;
}
}
public class MyDTO : DTO
{
public string Name = "";
public MyDTO() { }
public MyDTO(MyDTO source)
: base(source)
{
Name = source.Name;
}
}
public class A
{
private DTO _d;
public A()
{
D = new DTO();
}
public DTO D
{
get { return _d; }
set { _d = value; }
}
}
public class B : A
{
private MyDTO _md;
public B()
{
_md = new MyDTO();
}
public MyDTO D
{
get { return _md; }
set { _md = value; }
}
}
}
홈페이지에서 내가 (BL 저장소에 존재) MyBLMethod를 호출하고 (당신이 UI로 생각할 수) 및 클래스 객체를 전달하고 BL 저장소에서 내 DAL을 호출합니다. DAL에서 나는이 작성했습니다 :
static void MyDALMethod(DTO dto)
{
int i = dto.ID;
string name = ((MyDTO)dto).Name;//I could not do this
//because i will get object cast error as i can't cast from
//parent to child
}
당신은 내가 내 DAL에서 (예에서는 이름) 새로 확장 된 속성을 얻을 수있는 방법을 나에게 제안 수 없습니다.
캐스팅에서 예외가 발생 했습니까? – strager
예 위의 캐스팅은 " 'TestConsole.MyDTO'"예외에 'TestConsole.DTO'유형의 객체를 형 변환 할 수 없습니다. – Raghav