ICompareable
C#에서는 자료형조차 class이고, 모두 IComparable 인터페이스를 상속 받고 있다.
그래서 IComparable 인터페이스에 따라 자료형마다 비교 함수 .CompareTo() 를 사용할 수 있다.
public static int Ascend<T>(T a, T b) where T : IComparable<T>
{
return a.CompareTo(b);
}
이벤트
이벤트를 사용하기 위한 기본 절차
1. 델리게이트 선언
2. 클래스 내에서 위에서 선언한 델리게이트를 사용해서 이벤트를 선언
3. 이벤트 핸들러 작성
4. 이벤트 발생 시켜 핸들러 호출
namespace LearnCS_Delegate
{
delegate void EventHandler(string message); // 1. 델리게이트 선언
internal class MyNotis
{
public event EventHandler SomeHappend; // 2. 델리게이트를 사용한 이벤트 선언
//이벤트 키워드에 의해 델리게이트가 아닌 이벤트로서 선언됨
public EventHandler SomeHappy; // 일반적인 델리게이트 선언
public void DoSomething(int num)
{
int temp = num % 10;
if ( (temp != 0) && (temp % 3 == 0) ) //3, 6, 9 대충 30 미만이면 정상적인 3, 6, 9
{
SomeHappend($"{num} : 짝");
}
else
{
Console.WriteLine(num);
}
}
}
}
namespace LearnCS_Delegate
{
internal class Program
{
static void Main(string[] args)
{
MyNotis me = new MyNotis();
me.SomeHappy = new EventHandler(DialogHandler);
me.SomeHappy("Test");
me.SomeHappy += new EventHandler(DialogHandler);
me.SomeHappy("Test");
//SomeHappy 는 이벤트가 아닌 델리게이트이므로 =로도 작동한다
MyNotis notis = new MyNotis();
notis.SomeHappend += new EventHandler(DialogHandler);
for (int n = 1; n < 30; n++)
{
notis.DoSomething(n);
}
// 하진 SomeHappend는 이벤트이므로 += 로만 함수 추가가 가능하다
Lib.Commend("pause");
}
static public void DialogHandler(string msg)
{
Console.WriteLine(msg);
}
}
XML 파일 생성
XML 파일 만들기에는
using System.Xml; 을 사용한다
using System.Xml;
namespace LearnCS_XML
{
abstract class XmlClass<T> where T : XmlClass<T>
{
string FullPath;
XmlDocument XmlFile;
public XmlClass(string path)
{
FullPath = path;
XmlFile = new XmlDocument();
}
public abstract void XmlWriter(T dataList);
public abstract void XmlReader(out T dataList);
}
}
이후 XmlFile 의 메소드를 이용해 Xml을 작성할 수 있다.
// 파일 기초 정보 설정
XmlFile.AppendChild(XmlFile.CreateXmlDeclaration("1.0", "utf-8", "yes"));
// 최상위 노드 생성
XmlNode rootNode = XmlFile.CreateNode(XmlNodeType.Element, "StudentInfo", string.Empty);
XmlFile.AppendChild(rootNode);
// 하위 노드 생성
XmlNode childNode = XmlFile.CreateNode(XmlNodeType.Element, "InfoRecord", string.Empty);
rootNode.AppendChild(childNode);
// 하위 노드에 엘레멘트 생성
// Name
XmlElement xeName = XmlFile.CreateElement("Name");
xeName.InnerText = Name;
childNode.AppendChild(xeName);
// ID
xeName = XmlFile.CreateElement("ID");
xeName.InnerText = Id.ToString();
childNode.AppendChild(xeName);
// Scores
xeName = XmlFile.CreateElement("ScoreKorean");
xeName.InnerText = Scores[(int)ScoreType.Korean].ToString();
childNode.AppendChild(xeName);
xeName = XmlFile.CreateElement("ScoreEnglish");
xeName.InnerText = Scores[(int)ScoreType.English].ToString();
childNode.AppendChild(xeName);
xeName = XmlFile.CreateElement("ScoreMath");
xeName.InnerText = Scores[(int)ScoreType.Math].ToString();
childNode.AppendChild(xeName);
XML 파일 읽기 방법