다음 예제를 가정 해보십시오. 데이터베이스 연결 처리에 대한 일반적인 접근법. DbConnection.BeginTransaction()
(System.Data.Common에서) DbTransaction
인스턴스를 반환합니다. 명시 적으로 명시 했으므로 명시 적으로 캐스팅해야하는 이유는 무엇입니까?제네릭 형식으로 다시 캐스팅
internal abstract class ADatabase<DbCommandType, DbConnectionType, DbTransactionType> : IDisposable
where DbCommandType : DbCommand, new()
where DbConnectionType : DbConnection, new()
where DbTransactionType : DbTransaction, new()
{
DbConnectionType _connection;
DbTransactionType _transaction;
void Foo()
{
_transaction = _connection.BeginTransaction(); // <-- Error..
}
}
내가지고있어 오류가
암시 'DbTransactionType'에 유형 'System.Data.Common.DbTransaction을'변환 할 수 없습니다 오류 1입니다. 명시 적 변환은 (당신이 캐스트를 누락?) 내가 캐스팅 할 수 물론
, 존재하지만 문제는 이유입니까?
정확히 내 지점. 그런데 왜 오류가 있습니까? – Odys
@odyodyodys : 제 답변을 다시 읽어보십시오. 'string'에 할당하고자 할 때 왜 객체를 던져야하는지 묻는 것과 같습니다. –
'public 추상 클래스 DbConnection.BeginTransaction()'은'DbTransaction'을 반환하고'객체'는 반환하지 않습니다. 이 잘못이라면 저를 시정하십시오. – Odys