오늘 마지막 질문이 될 것 같아요!
namespace ConsoleApp36
{
public interface IRepository
{
void Get();
}
public class Repository : IRepository
{
public void Get()
{
Console.WriteLine("Get() 메서드를 구현해야 합니다.");
}
}
class Program
{
static void Main(string[] args)
{
IRepository repository = new Repository();
unsafe
{
TypedReference tr = __makeref(repository);
IntPtr ptr = **(IntPtr**)(&tr);
Console.WriteLine(ptr);
}
repository.Get();
}
}
}
[출력]
51913544
Get() 메서드를 구현해야 합니다.
[질문 1]
알려주신 코드를 추가해서 ptr에 있는 값을 출력해보니 51913544가 나오는데
이것이 힙에 할당된 new new Repository() 시작주소가 되겠죠?
[질문 2]
만약 컴퓨터가 32비트 운영체제면 포인터 크기는 자료형에 상관없이 4바이트니까
주소를 담고 있는 repository의 자료형에 해당하는 IRepository의 크기도 4바이트로 생각해도 되나요?
[질문 3]
제가 sizeof로는 클래스, 인터페이스 등의 크기를 출력할 수 없더라구요....
Console.WriteLine(sizeof(IRepository)); ← 오류 발생
만약 클래스, 인터페이스의 크기를 출력하고 싶다면
위의 예시에서는 IRepository의 크기를 출력하고 싶다면 어떻게 해야 될까요?
추신) 커피 기능 추가하시면 꼭 알려주세요!
즐거운 금요일 밤 되세요~!!
[최초 등록일: ]
[최종 수정일: 11/27/2020]