본문 바로가기

전체

(363)
[C# 때려잡기] C# 강의 31. 가상함수, 정적 바인딩, 동적바인딩 class Weapon { public void Attack() { Console.WriteLine("무기로 공격!"); } } class Knife : Weapon { public void Attack() { Console.WriteLine("칼로 공격!"); } } 출처: https://see-ro-e.tistory.com/133 [SeeRoE 프로그래밍 기록]저번에 이런식으로 오버라이딩 했다. 여기서 이렇게 weapon을 다운캐스팅 하지 않고 그상태로 attack을 호출하게 되면 어택의 부모가 불리게된다. namespace ConsoleApp4{ class Weapon { public void Attack() { Console.WriteLine("무기로 공격!"); } } class Knife : ..
[C#/WPF] XAML을 사용하여 WPF에서 Windows Forms 컨트롤 호스팅 https://docs.microsoft.com/ko-kr/dotnet/framework/wpf/advanced/walkthrough-hosting-a-windows-forms-control-in-wpf-by-using-xaml MSAGL을 WPF 에서띄울려고 사용했다.뭐 서드파티가 대게 winform만 제대로 하고 wpf는 안해주는 경우가 많아서 그때그때 찾다가 포스팅.. 어셈블리 추가 WindowsFormsIntegration System.Windows.Forms 과 같이 WindowsFormsHost 가 가능하다.여기에 x:Name줘서 그냥 사용해도 된다.
[C#/Winform] Microsoft Automatic Graph Layout (MSAGL) https://www.microsoft.com/en-us/research/project/microsoft-automatic-graph-layout/?from=http%3A%2F%2Fresearch.microsoft.com%2Fen-us%2Fprojects%2Fmsagl%2F#!code-samples 뭐 이쁘장하게 그려주는건 아닌데NeGet에서 간단히 다운받고 사용하기 쉽다. Microsoft Automatic Graph Layout using System; using System.Collections.Generic; using System.Windows.Forms; class ViewerSample { public static void Main() { //create a form System.Window..
[C# 때려잡기] C# 강의 30. 다형성, 다운 캐스팅 업 캐스팅 기존에 내 캐릭터에 칼을 가지도록 하였다. class Weapon { public void Attack() { Console.WriteLine("무기로 공격!"); } } class Knife : Weapon { public void Attack() { Console.WriteLine("칼로 공격!"); } } class Gun : Weapon { } class Bow : Weapon { } class Character { private Knife k; private Gun g; private Bow b; //... } 아근데 칼만 쓸것은 아니니까총도 넣고 활도 넣고 지팡이도넣고...와 그러면 character는 맴버변수로 게임에쓰이는 모든 무기를 다 가지고 있어야한다.메모리를 미친듯이 잡아먹는다. 공격..
[C# 때려잡기] C# 강의 29. 오버라이딩 (overriding) 전에 강의에서 웨폰 클래스를 만들고 각종 무기들이 상속받아 모든 무기가 attack 함수를 사용할수 있었다. 그런데 내 게임에서 나이프는 SSS급 레어 무기라 공격할때 다른 무기들과 다르게 동작하고 싶다. class Weapon { public void Attack() { Console.WriteLine("무기로 공격!"); } } class Knife : Weapon { public void Attack() { Console.WriteLine("칼로 공격!"); } } class Gun : Weapon { } class Program { static void Main(string[] args) { Knife k = new Knife(); Gun g = new Gun(); k.Attack(); g.Att..
[C# 때려잡기] C# 강의 28. 다중상속 C#에서 안된다. 1. 다중상속 요런것이다. 2. 죽음의 다이아몬드 문제 앗..아앗!이렇게 되면 카메라폰이 만들어질때 메모리에 요런식으로 5개의 객체가 만들어질테고 전자기기에 ON이라는 함수가 있으면 전화기도 상속받아 있을테고 카메라도 있을테고카메라폰에는 ON 이 2개! ON 을 사용하면 어느 ON의 주인이 누구인지 알길이 없어 족보가 꼬여버린다 (모호해진다) 요런 상황이 죽음의 다이아몬드이고요런 상황때문에 개발자를 믿지 못하는 C#은 아예 못하게막아놓았다 아니 근데 이걸 막아버려서여러개의 요것들을 상속받고 싶은데..또는 상위로 사용하고 싶은데.. 그럴떄를 위해서 인터페이스를 만들었다.인터페이스는 추후에 배운다.
[C# 때려잡기] C# 강의 27. base class 저번시간에 자식이 만들어지면 부모도 만들어진다고 했으며해당 부모의 변수를 사용하는것이라고 했는데만약 부모와 변수이름이 곂치면 어떻게 할까? 1. 부모로써의 base class Weapon { protected int power; public Weapon() { power = 10; } } class Gun : Weapon { protected int power; public Gun() { power = 100; Console.WriteLine(power); Console.WriteLine(this.power); Console.WriteLine(base.power); } } class Program { static void Main(string[] args) { Gun g = new Gun(); } } 부..
[C# 때려잡기] C# 강의 26. 클래스의 핵심 상속 이번 강의는 객체지향의 꽃이라고 볼수있는 상속을 알아보도록 하겠다.객체지향의 꽃이 상속이다 (?) 1. 상속 (inheritance) 지금까지 주구장창 마리오만 사용했으니 조금 다르게RPG게임을 만든다고 해보자캐릭터는 마리오 게임에서 만든 클래스를 재사용 하자! (와! 클래스의 재사용성을 알았다) RPG게임이라면 모름지기 무기를 가지고 있어야한다.일단 간단하게 총 칼 활 무기 3개 클래스를 만들었다 근데 생각해보니까 3개다 무기라 공통된점이 너무 많다 그렇다고 같은 클래스로 퉁치기에는 총이랑 칼이랑 활은 너무 다르다. 아 무기를 서너개 더만든다면 또 똑같은 공격함수를 짜고 공격력 변수를 만들고...너무 화가나서 더이상 게임 제작하기 싫을것이다. 프로그래머가 개발도중에 도망가는것을 막기위해 C#은 상속을 ..