Microsoft MVP성태의 닷넷 이야기
교재 208쪽 질문....있습니다... [링크 복사], [링크+제목 복사],
조회: 13771
글쓴 사람
한예지 donator
홈페이지
첨부 파일
 

교재 208쪽에서 인터페이스가 없다면 별도의 불린형 필드를 둬서 개발자가 명시해야 한다고 말씀하셔서
직접 구현해보았는데... 오류가 발생했습니다ㅠ

처리되지 않은 예외: System.InvalidCastException: 'ConsoleApp50.Computer' 형식 개체를 'ConsoleApp50.Person' 형식으로 캐스팅할 수 없습니다.

모든 개체의 부모는 object로 알고 있는데 캐스팅 불가라고 하니까
어떻게 수정해야 될 지 모르겠습니다....

namespace ConsoleApp50
{
    class Computer
    {
       public bool IsOverloaded = false;
    }

    class Person
    {
        string name;
        public bool IsOverloaded = true;
        public Person(string name)
        {
            this.name = name;
        }

        public override string ToString()
        {
            return "Person: " + this.name;
        }
    }
    class Program
    {
        private static void DisplayObject(object obj)
        {
            if(((Computer)obj).IsOverloaded)
            {
                
            }
            if (((Person)obj).IsOverloaded)
            {
                Console.WriteLine(obj.ToString());
            }
        }

        static void Main(string[] args)
        {
            DisplayObject(new Computer());
            DisplayObject(new Person("홍길동"));
        }
    }
}
타인의 코드를 보면 이해가 되는데 막상 직접 짜려고 하면 어렵네요...








[최초 등록일: ]
[최종 수정일: 1/15/2021]


비밀번호

댓글 작성자
 



2021-01-15 06시53분
당연합니다. Computer 개체를 (Person)으로 강제 형변환을 하려니까 오류가 발생하는 것입니다. 이런 부분에 대한 문제는 144페이지 as, is 연산자를 보세요.

(그래서, 코딩은 많이 해봐야 합니다. 책 사서 눈으로 읽어내려가는 식으로 공부할 수 없는 것이 프로그래밍입니다.)
정성태
2021-01-15 07시10분
[예지] 선생님 말씀하신대로 수정했는데 선생님 생각하신 코드가 제가 작성한 코드 모양 맞으시죠???
namespace Example
{
    class Computer
    {
       public bool IsOverloaded = false;
    }

    class Person
    {
        string name;
        public bool IsOverloaded = true;
        public Person(string name)
        {
            this.name = name;
        }

        public override string ToString()
        {
            return "Person: " + this.name;
        }
    }
    class Program
    {
        private static void DisplayObject(object obj)
        {
            if(obj is Person && ((Person)obj).IsOverloaded)
            {
                Console.WriteLine(obj.ToString());
            }
            else if(obj is Computer)
            {

            }
        }

        static void Main(string[] args)
        {
            DisplayObject(new Computer());
            DisplayObject(new Person("홍길동"));
        }
    }
}

https://www.sysnet.pe.kr/Default.aspx?mode=3&sub=0&pageno=0&detail=1&wid=5452
여기 답변도 부탁드리겠습니다!!
[guest]
2021-01-15 08시02분
그러게요... 그 정도로 정리할 수 있습니다. 나중에 C# 9.0의 패턴 인식 구문을 보면 다음과 같은 식으로 변경하는 것도 가능합니다.

if (obj is Person p && p.IsOverloaded)
{
    Console.WriteLine(obj.ToString());
}
else if (obj is Computer)
{
}
정성태

1  2  3  4  [5]  6  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
5866월급쟁이3/28/202312269cmake 크로스 컴파일 관련하여 질문이 있습니다 [1]
5865guest3/28/202312317Github Copilot과 코딩실력 향상? [1]
5864guest3/27/202313497System.NullReferenceException - 개체참조가 개체의 인스턴스... [6]파일 다운로드1
5863guest3/24/202312387이벤트 핸들러 사라짐 현상 - Button [4]
5862guest3/21/202312899세계최초 hts와 싱글스레드 [8]
5861다크파이썬3/21/202313747WPF를 사용하려고 하려고 도서 문의합니다. [2]
5860guest3/21/202312627인텔코어 i5 CPU와 스레드 [4]
5859guest3/21/202311902개발 일지 어떻게 관리하시나요? 이런 프로그램 없나요? [3]
5858김태원3/18/202312261안녕하세요! [5]
5857guest3/17/202312077귀도 반 로썸을 보고 [4]
5856guest3/17/202313067Form1_FormClosing에 closing time을 Sqlite 저장하는 법? [6]파일 다운로드1
5855욜로3/17/202311734C# 메타데이터에서 불러오는 참조 정의가 안됨 [1]
5854민성3/16/202311908안녕하세요 asp.net mvc using문 관련하여 [1]
5853pa3/16/202312506오피스 2016 업데이트 후 파일 출력 불가 [1]
5852guest3/16/202311276입력 foreach 검색/출력 foreach [3]
5851guest3/15/202312455foreach내 list변경 [10]
5850독서가3/14/202311173C#에서 동적dll 사용시 문의입니다. [4]파일 다운로드1
5849guest3/9/202312549C# wpf로 Web에서 구동되는 hts가능한가요? (노트북없고 스마트폰 없음) [4]
5848민성3/9/202311808도움 요청드립니다. [2]파일 다운로드1
5847guest3/7/202312033SQlike Like 구문 - 1시간째 인데 안되네요 [13]
5846Huuu...3/7/202310556웹 다운로드에 대한 고찰 [5]파일 다운로드1
5845guest3/7/202311037C# Split함수의 불친절함 [1]
5844까망이3/7/202311084c# 무료 디컴파일러는 어떤게 좋습니까? [1]
5843guest3/7/202311542판매 후 dll 등 에러 [5]
5842kr13/6/202311276publish 할 때 분석기 관련 dll 제외 [5]
5841guest3/3/202311655프로그램 판매 시 - Upgrade 버전 판매 [2]
1  2  3  4  [5]  6  7  8  9  10  11  12  13  14  15  ...