본문 바로가기

C#

(44)
[C# 때려잡기] C# 강의 32. 추상클래스와 인터페이스 1. 추상클래스 weapon이놈은 사실 상속을 위해서만 만들어놓은 놈이고 new weapon이나 Weapon w; 이런식으로 웨폰 객체를 만들일은 없다.그런데도 불구하고 attack 함수를 구현할 필요는 없다. 그래서 내용을 지웠다. namespace ConsoleApp4{ class Weapon { public virtual void Attack() { } } class Knife : Weapon { public override void Attack() { Console.WriteLine("칼로 공격!"); } } class Program { static void Main(string[] args) { Weapon w = new Knife(); w.Attack(); } }} 이렇게 코딩을 하고 같이 개..
[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(); } } 부..