enumÀº ´ëºÎºÐÀÇ ¾ð¾î¿¡¼ Áö¿øµÈ´Ù.
enumÀ» ¼±¾ðÇÒ¶§´Â ±ò²ûÇØ º¸ÀÌÁö¸¸ enumÀ» ½ÇÁ¦·Î »ç¿ëÇÏ°Ô µÇ¸é ÀÌ ¹æ¹ý ¹Û¿¡ ¾ø´ÂÁö »ý°¢ÇÏ°Ô µÈ´Ù.
enum »ç¿ëÇÑ ¿¹
enumÀ» ±¸Á¶Ã¼·Î ¸¸µé¾î ÁöÀúºÐÇÑ switch ¸í·É¾î¸¦ ¾ø¾Ö º¸ÀÚ.
enumÀÇ ¿øº»Àº ´ÙÀ½°ú °°´Ù.
using System;
public enum Count
{
ONE = 1,
TWO = 2,
THREE = 3
}
namespace enum_test
{
class Program
{
static int GetNumber(Count count)
{
switch (count)
{
case Count.ONE:
return 1;
case Count.TWO:
return 2;
case Count.THREE:
return 3;
}
return 0;
}
static void Main(string[] args)
{
Console.WriteLine("enum : " + Count.ONE.ToString() + " " +
GetNumber(Count.ONE));
}
}
}
ÀüÇüÀûÀÎ enum ¸í·É¾î¸¦ »ç¿ëÇÏ°í ÀÖ´Â ±¸¹®ÀÌ´Ù.
enum »ç¿ëÀ¸·Î ÀÎÇØ switch 󸮰¡ ÇÊ¿äÇÏ´Ù.
enumÀ» ±¸Á¶Ã¼·Î ´ëü
enumÀ» ±¸Á¶Ã¼·Î ´ëüÇϸé swtich ¸í·É¾î¸¦ ¾ø¾Ù¼ö ÀÖ´Ù.
°ªÀÌ º¯°æ µÇÁö ¾Êµµ·Ï Çϱâ À§ÇØ º¯¼ö¸¦ "static readonly"·Î ¼±¾ðÇÑ´Ù.
using System;
public struct Count
{
public static readonly Count ONE = new Count("ONE", 1);
public static readonly Count TWO = new Count("TWO", 2);
public static readonly Count THREE = new Count("THREE", 3);
public string Name { get; private set; }
public int Value { get; private set; }
private Count(string name, int value)
{
Name = name;
Value = value;
}
}
namespace enum_test
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("enum : " + Count.ONE.Name + " " + Count.ONE.Value);
Count count = Count.TWO;
Console.WriteLine("enum : " + count.Name + " " + count.Value);
}
}
}
±¸Á¶Ã¼ ºñ±³
Ŭ·¡½º³ª ±¸Á¶Ã¼¿¡¼ ºñ±³ ¿¬»êÀÚ(operator ==, operator !=)¸¸ ¸¸µé¸é ´ÙÀ½ÀÇ ¿ö´×ÀÌ ¹ß»ýÇÑ´Ù.
warning CS0660: `Model.Gender' defines operator == or operator != but does not override Object.Equals(object o)
warning CS0661: `Model.Gender' defines operator == or operator != but does not override Object.GetHashCode()
À̶§, ¿ö´×ÀÌ ¾øÀÌ ºñ±³ ¿¬»êÀÚ¸¦ »ç¿ëÇØ ±¸Á¶Ã¼¸¦ ºñ±³ ÇÒ·Á¸é ´ÙÀ½ÀÇ »çÇ×ÀÌ Æ÷ÇÔ µÇ¾î¾ß ÇÑ´Ù.
1. IEquatable<T> ÀÎÅÍÆäÀ̽º¸¦ »ó¼ÓÇÑ´Ù.
2. public override bool Equals(object obj)¸¦ ÀçÁ¤ÀÇ ÇÑ´Ù.
3. public override int GetHashCode()¸¦ ÀçÁ¤ÀÇ ÇÑ´Ù.
4. public bool Equals(Gender g)¸¦ Á¤ÀÇÇÑ´Ù.
5. ºñ±³ ¿¬»êÀÚ¸¦ Á¤ÀÇÇÑ´Ù.
2¹ø°ú 3¹øÀÇ Equals, GetHashCode´Â ¿ö´×À» ¾ø¾Ö±â À§ÇØ ÇÊ¿äÇÑ ÇÔ¼öÀÌ´Ù.
ÀÌ ÇÔ¼ö ³»¿¡¼ Ưº°ÇÑ ±¸ÇöÀº ÇÏÁö ¾Ê´Â´Ù.
3¹øÀ» ±¸ÇöÇÏÁö ¾ÊÀ¸¸é ´ÙÀ½ÀÇ ¿¡·¯°¡ ¹ß»ýÇÑ´Ù.
warning CS0660: `Model.Gender' defines operator == or operator != but does not override Object.Equals(object o)
¼³¸í º¸´Ù Äڵ带 º¸´Â°ÍÀÌ ÀÌÇØ°¡ ºü¸¦ °ÍÀÌ´Ù.
public struct Gender: IEquatable<Gender>
{
public static readonly Gender male = new Gender("male", "male_top_orange");
public static readonly Gender female = new Gender("female", "female_top_orange");
public string Name { get; private set; }
public string Upper1 { get; private set; }
private Gender(string name, string upper1, string upper2)
{
Name = name;
Upper1 = upper1;
}
public override int GetHashCode()
{
return this.GetHashCode();
}
public override bool Equals(object obj)
{
return obj is Gender && Equals((Gender)obj);
}
public bool Equals(Gender g)
{
return (Name == g.Name);
}
public static bool operator ==(Gender lhs, Gender rhs)
{
return lhs.Equals(rhs);
}
public static bool operator !=(Gender lhs, Gender rhs)
{
return !(lhs.Equals(rhs.Name));
}
}
ÂüÁ¶)
https://www.xuehua.us/2018/07/08/蛮éÚ译馆-unity-c编ïï优ûù-ØÝ举/zh-tw/
http://www.huristic.co/blog/2018/1/30/c-advanced-enum-value-types
|