Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
C# ö¾Ù¸ß¼¶¼¼ÇÉ
 
×÷Õߣº¾«ÖÂÂëÅ©
  3402  次浏览      29
 2020-12-14 
 
±à¼­ÍƼö:

±¾ÎÄÖ÷Òª½éÉÜÁËö¾Ù»ù´¡¡¢Óû§½ÇÉ«´æ´¢ÎÊÌ⡢ö¾ÙµÄ Flags ÌØÐÔ¡¢½â¾öö¾ÙÖµ³åÍ»£º2 µÄÃݵÈÏà¹ØÄÚÈÝ¡£
±¾ÎÄÀ´×ÔÓÚÖªºõ£¬ÓÉ»ðÁú¹ûAnna±à¼­ÍƼö

ÎÄÕ¿ªÍ·Ïȸø´ó¼Ò³öÒ»µÀÃæÊÔÌ⣺

ÔÚÉè¼ÆÄ³Ð¡ÐÍÏîÄ¿µÄÊý¾Ý¿â£¨¼ÙÉèÓõÄÊÇ MySQL£©Ê±£¬Èç¹û¸øÓû§±í£¨User£©Ìí¼ÓÒ»¸ö×ֶΣ¨Roles£©ÓÃÀ´´æ´¢Óû§µÄ½ÇÉ«£¬Äã»á¸øÕâ¸ö×Ö¶ÎÉèÖÃʲôÀàÐÍ£¿Ìáʾ£ºÒª¿¼Âǵ½½ÇÉ«ÔÚºó¶Ë¿ª·¢Ê±ÐèÒªÓÃö¾Ù±íʾ£¬ÇÒÒ»¸öÓû§¿ÉÄÜ»áÓµÓжà¸ö½ÇÉ«¡£

Ó³ÈëÄãÄÔº£µÄµÚÒ»¸ö´ð°¸¿ÉÄÜÊÇ£ºvarchar ÀàÐÍ£¬Ó÷ָô·ûµÄ·½Ê½À´´æ´¢¶à¸ö½ÇÉ«£¬±ÈÈçÓà 1|2|3 »ò 1,2,3 À´±íʾÓû§ÓµÓжà¸ö½ÇÉ«¡£µ±È»Èç¹û½ÇÉ«ÊýÁ¿¿ÉÄܳ¬¹ý¸öλÊý£¬¿¼Âǵ½Êý¾Ý¿âµÄ²éѯ·½±ã£¨±ÈÈçÓà INSTR »ò POSITION À´ÅжÏÓû§ÊÇ·ñ°üº¬Ä³¸ö½ÇÉ«£©£¬½ÇÉ«µÄÖµÖÁÉÙÒª´ÓÊý×Ö 10 ¿ªÊ¼¡£·½°¸ÊÇ¿ÉÐеģ¬¿ÉÊDz»ÊÇÌ«¼òµ¥ÁË£¬ÓÐûÓиüºÃµÄ·½°¸£¿¸üºÃµÄ»Ø´ðÓ¦ÊÇÕûÐÍ£¨int¡¢bigint µÈ£©£¬ÓŵãÊÇд SQL ²éѯÌõ¼þ¸ü·½±ã£¬ÐÔÄÜ¡¢¿Õ¼äÉ϶¼ÓÅÓÚ varchar¡£µ«ÕûÐͱϾ¹Ö»ÊÇÒ»¸öÊý×Ö£¬Ôõô±íʾ¶à¸ö½ÇɫĨ£¿´ËʱÏëµ½Á˶þ½øÖÆÎ»²Ù×÷µÄÄ㣬ÐÄÖÐÓ¦¸ÃÔçÓÐÁ˴𰸡£ÇÒ±£ÁôÄãÐÄÖеĴ𰸣¬½Ó×Å¿´Íê±¾ÎÄ£¬»òÐíÄã»áÓÐÒâÍâµÄÊÕ»ñ£¬ÒòΪʵ¼ÊÓ¦ÓÃÖпÉÄÜ»¹»áÓöµ½Ò»Á¬´®µÄÎÊÌ⡣ΪÁ˸üºÃµÄ˵Ã÷ºóÃæµÄÎÊÌ⣬ÎÒÃÇÏÈÀ´»Ø¹ËÒ»ÏÂö¾ÙµÄ»ù´¡ÖªÊ¶¡£

ö¾Ù»ù´¡

ö¾ÙÀàÐ͵Ä×÷ÓÃÊÇÏÞÖÆÆä±äÁ¿Ö»ÄÜ´ÓÓÐÏÞµÄÑ¡ÏîÖÐȡֵ£¬ÕâЩѡÏö¾ÙÀàÐ͵ijÉÔ±£©¸÷×Ô¶ÔÓ¦ÓÚÒ»¸öÊý×Ö£¬Êý×ÖĬÈÏ´Ó 0 ¿ªÊ¼£¬²¢ÒԴ˵ÝÔö¡£ÀýÈ磺

public enum Days
{
Sunday, Monday, Tuesday, // ...
}

ÆäÖÐ Sunday µÄÖµÊÇ 0£¬Monday ÊÇ 1£¬ÒÔ´ËÀàÍÆ¡£ÎªÁËÒ»ÑÛÄÜ¿´³öÿ¸ö³ÉÔ±´ú±íµÄÖµ£¬Ò»°ãÍÆ¼öÏÔʾµØ½«³ÉԱֵд³öÀ´£¬²»ÒªÊ¡ÂÔ£º

public enum Days
{
Sunday = 0, Monday = 1, Tuesday = 2, // ...
}

C# ö¾Ù³ÉÔ±µÄÀàÐÍĬÈÏÊÇ int ÀàÐÍ£¬Í¨¹ý¼Ì³Ð¿ÉÒÔÉùÃ÷ö¾Ù³ÉԱΪÆäËüÀàÐÍ£¬±ÈÈ磺

public enum Days : byte
{
Monday = 1,
Tuesday = 2,
Wednesday = 3,
Thursday = 4,
Friday = 5,
Saturday = 6,
Sunday = 7
}

ö¾ÙÀàÐÍÒ»¶¨ÊǼ̳Ð×Ô byte¡¢sbyte¡¢short¡¢ushort¡¢int¡¢uint¡¢long ºÍ ulong ÖеÄÒ»ÖÖ£¬²»ÄÜÊÇÆäËüÀàÐÍ¡£ÏÂÃæÊǼ¸¸öö¾ÙµÄ³£¼ûÓ÷¨£¨ÒÔÉÏÃæµÄ Days ö¾ÙΪÀý£©£º

// ö¾Ùת×Ö·û´®
string foo = Days.Saturday.ToString(); // "Saturday"
string foo = Enum.GetName(typeof(Days), 6); // "Saturday"
// ×Ö·û´®×ªÃ¶¾Ù
Enum.TryParse("Tuesday", out Days bar); // true, bar = Days.Tuesday
(Days)Enum.Parse(typeof(Days), "Tuesday"); // Days.Tuesday

// ö¾ÙתÊý×Ö
byte foo = (byte)Days.Monday; // 1
// Êý×Öתö¾Ù
Days foo = (Days)2; // Days.Tuesday

// »ñȡö¾ÙËùÊôµÄÊý×ÖÀàÐÍ
Type foo = Enum.GetUnderlyingType(typeof(Days))); // System.Byte

// »ñÈ¡ËùÓеÄö¾Ù³ÉÔ±
Array foo = Enum.GetValues(typeof(MyEnum);
// »ñÈ¡ËùÓÐö¾Ù³ÉÔ±µÄ×Ö¶ÎÃû
string[] foo = Enum.GetNames(typeof(Days));

ÁíÍ⣬ֵµÃ×¢ÒâµÄÊÇ£¬Ã¶¾Ù¿ÉÄÜ»áµÃµ½·ÇÔ¤ÆÚµÄÖµ£¨ÖµÃ»ÓжÔÓ¦µÄ³ÉÔ±£©¡£±ÈÈ磺

Days d = (Days)21; // ²»»á±¨´í
Enum.IsDefined(typeof(Days), d); // false

¼´Ê¹Ã¶¾ÙûÓÐֵΪ 0 µÄ³ÉÔ±£¬ËüµÄĬÈÏÖµÓÀÔ¶¶¼ÊÇ 0¡£

var z = default(Days); // 0

ö¾Ù¿ÉÒÔͨ¹ý Description¡¢Display µÈÌØÐÔÀ´Îª³ÉÔ±Ìí¼ÓÓÐÓõĸ¨ÖúÐÅÏ¢£¬±ÈÈ磺

public enum ApiStatus
{
[Description("³É¹¦")]
OK = 0,
[Description("×ÊԴδÕÒµ½")]
NotFound = 2,
[Description("¾Ü¾ø·ÃÎÊ")]
AccessDenied = 3
}

static class EnumExtensions
{
public static string GetDescription(this Enum val)
{
var field = val.GetType().GetField(val.ToString());
var customAttribute = Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute));
if (customAttribute == null) { return val.ToString(); }
else { return ((DescriptionAttribute) customAttribute).Description; }
}
}

static void Main(string[] args)
{
Console.WriteLine(ApiStatus.Ok.GetDescription()); // "³É¹¦"
}

ÉÏÃæÕâЩÎÒÈÏΪÒѾ­°üº¬Á˴󲿷ÖÎÒÃÇÈÕ³£Óõ½µÄö¾Ù֪ʶÁË¡£ÏÂÃæÎÒÃǼÌÐø»Øµ½ÎÄÕ¿ªÍ·ËµµÄÓû§½ÇÉ«´æ´¢ÎÊÌâ¡£

Óû§½ÇÉ«´æ´¢ÎÊÌâ

ÎÒÃÇÏȶ¨ÒåÒ»¸öö¾ÙÀàÐÍÀ´±íʾÁ½ÖÖÓû§½ÇÉ«£º

public enum Roles
{
Admin = 1,
Member = 2
}

ÕâÑù£¬Èç¹ûij¸öÓû§Í¬Ê±ÓµÓÐ Admin ºÍ Member Á½ÖÖ½ÇÉ«£¬ÄÇô User ±íµÄ Roles ×ֶξÍÓ¦¸Ã´æ 3¡£ÄÇÎÊÌâÀ´ÁË£¬´ËʱÈô²éѯËùÓÐÓµÓÐ Admin ½ÇÉ«µÄÓû§µÄ SQL ¸ÃÔõÃ´Ð´ÄØ£¿¶ÔÓÚÓлù´¡µÄ³ÌÐòÔ±À´Ëµ£¬Õâ¸öÎÊÌâºÜ¼òµ¥£¬Ö»ÒªÓÃλ²Ù×÷·ûÂß¼­Ó루¡®&¡¯£©À´²éѯ¼´¿É¡£

SELECT * FROM `User` WHERE `Roles` & 1 = 1;

ͬÀí£¬²éѯͬʱӵÓÐÕâÁ½ÖÖ½ÇÉ«µÄÓû§£¬SQL Óï¾äÓ¦¸ÃÕâôд£º

SELECT * FROM `User` WHERE `Roles` & 3 = 3;

¶ÔÕâÌõ SQL Óï¾äÓà C# À´ÊµÏÖ²éѯÊÇÕâÑùµÄ£¨ÎªÁ˼òµ¥£¬ÕâÀïʹÓÃÁË Dapper£©£º

public class User
{
public int Id { get; set; }
public Roles Roles { get; set; }
}

connection.Query<User>(
"SELECT * FROM `User` WHERE `Roles` & @roles = @roles;",
new { roles = Roles.Admin | Roles.Member });

¶ÔÓ¦µÄ£¬ÔÚ C# ÖÐÒªÅжÏÓû§ÊÇ·ñÓµÓÐij¸ö½ÇÉ«£¬¿ÉÒÔÕâôÅжϣº

// ·½Ê½Ò»
if ((user.Roles & Roles.Admin) == Roles.Admin)
{
// ×ö¹ÜÀíÔ±¿ÉÒÔ×öµÄÊÂÇé
}

// ·½Ê½¶þ
if (user.Roles.HasFlag(Roles.Admin))
{
// ×ö¹ÜÀíÔ±¿ÉÒÔ×öµÄÊÂÇé
}

ͬÀí£¬ÔÚ C# ÖÐÄã¿ÉÒÔ¶Ôö¾Ù½øÐÐÈÎÒâλÂß¼­ÔËË㣬±ÈÈçÒª°Ñ½ÇÉ«´Óij¸öö¾Ù±äÁ¿ÖÐÒÆ³ý£º

var foo = Roles.Admin | Roles.Member;
var bar = foo & ~Roles.Admin;

Õâ¾Í½â¾öÁËÎÄÕÂÇ°ÃæÌáµ½µÄÓÃÕûÐÍÀ´´æ´¢¶à½ÇÉ«µÄÎÊÌ⣬²»ÂÛÊý¾Ý¿â»¹ÊÇ C# ÓïÑÔ£¬²Ù×÷É϶¼ÊÇ¿ÉÐе쬶øÇÒÒ²ºÜ·½±ãÁé»î¡£

ö¾ÙµÄ Flags ÌØÐÔ

ÏÂÃæÎÒÃÇÌṩһ¸öͨ¹ý½ÇÉ«À´²éѯÓû§µÄ·½·¨£¬²¢ÑÝʾÈçºÎµ÷Óã¬ÈçÏ£º

public IEnumerable<User> GetUsersInRoles(Roles roles)
{
_logger.LogDebug(roles.ToString());
_connection.Query<User>(
"SELECT * FROM `User` WHERE `Roles` & @roles = @roles;",
new { roles });
}

// µ÷ÓÃ
_repository.GetUsersInRoles(Roles.Admin | Roles.Member);

Roles.Admin | Roles.Member µÄÖµÊÇ 3£¬ÓÉÓÚ Roles ö¾ÙÀàÐÍÖв¢Ã»Óж¨ÒåÒ»¸öֵΪ 3 µÄ×ֶΣ¬ËùÒÔÔÚ·½·¨ÄÚ roles ²ÎÊýÏÔʾµÄÊÇ 3¡£3 Õâ¸öÐÅÏ¢¶ÔÓÚÎÒÃǵ÷ÊÔ»ò´òÓ¡ÈÕÖ¾ºÜ²»ÓѺá£ÔÚ·½·¨ÄÚ£¬ÎÒÃDz¢²»ÖªµÀÕâ¸ö 3 ´ú±íµÄÊÇʲô¡£ÎªÁ˽â¾öÕâ¸öÎÊÌ⣬C# ö¾ÙÓиöºÜÓÐÓõÄÌØÐÔ£ºFlagsAtrribute¡£

[Flags]
public enum Roles
{
Admin = 1,
Member = 2
}

¼ÓÉÏÕâ¸ö Flags ÌØÐÔºó£¬ÎÒÃÇÔÙÀ´µ÷ÊÔ GetUsersInRoles(Roles roles) ·½·¨Ê±£¬roles ²ÎÊýµÄÖµ¾Í»áÏÔʾΪ Admin|Member ÁË¡£¼òµ¥À´Ëµ£¬¼Ó²»¼Ó Flags µÄÇø±ðÊÇ£º

var roles = Roles.Admin | Roles.Member;
Console.WriteLing(roles.ToString()); // "3"£¬Ã»ÓÐ Flags ÌØÐÔ
Console.WriteLing(roles.ToString()); // "Admin, Member"£¬ÓÐ Flags ÌØÐÔ

¸øÃ¶¾Ù¼ÓÉÏ Flags ÌØÐÔ£¬ÎÒ¾õµÃÓ¦µ±ÊÓΪ C# ±à³ÌµÄÒ»ÖÖ×î¼Ñʵ¼ù£¬ÔÚ¶¨Òåö¾Ùʱ¾¡Á¿¼ÓÉÏ Flags ÌØÐÔ¡£

½â¾öö¾ÙÖµ³åÍ»£º2 µÄÃÝ

µ½Õ⣬ö¾ÙÀàÐÍ Roles Ò»Çп´ÉÏȥûʲôÎÊÌ⣬µ«Èç¹ûÏÖÔÚÒªÔö¼ÓÒ»¸ö½ÇÉ«£ºMananger£¬»á·¢ÉúʲôÇé¿ö£¿°´ÕÕÊý×ÖÖµµÝÔöµÄ¹æÔò£¬Manager µÄÖµÓ¦µ±ÉèΪ 3¡£

[Flags]
public enum Roles
{
Admin = 1,
Member = 2,
Manager = 3
}

Äܲ»ÄÜ°Ñ Manager µÄÖµÉèΪ 3£¿ÏÔÈ»²»ÄÜ£¬ÒòΪ Admin ºÍ Member ½øÐÐλµÄ»òÂß¼­ÔËË㣨¼´£ºAdmin | Member£© µÄÖµÒ²ÊÇ 3£¬±íʾͬʱӵÓÐÕâÁ½ÖÖ½ÇÉ«£¬ÕâºÍ Manager ³åÍ»ÁË¡£ÄÇÔõÑùÉèÖµ²ÅÄܱÜÃâ³åÍ»ÄØ£¿¼ÈÈ»ÊǶþ½øÖÆÂß¼­ÔËËã¡°»ò¡±»áºÍ³ÉÔ±Öµ²úÉú³åÍ»£¬ÄǾÍÀûÓÃÂß¼­ÔËËã»òµÄ¹æÂÉÀ´½â¾ö¡£ÎÒÃÇÖªµÀ¡°»ò¡±ÔËËãµÄÂß¼­ÊÇÁ½±ßÖ»Òª³öÏÖÒ»¸ö 1 ½á¹û¾Í»á 1£¬±ÈÈç 1|1¡¢1|0 ½á¹û¶¼ÊÇ 1£¬Ö»ÓÐ 0|0 µÄÇé¿ö½á¹û²ÅÊÇ 0¡£ÄÇôÎÒÃǾÍÒª±ÜÃâÈÎÒâÁ½¸öÖµÔÚÏàͬµÄλÖÃÉϳöÏÖ 1¡£¸ù¾Ý¶þ½øÖÆÂú 2 ½ø 1 µÄÌØµã£¬Ö»Òª±£Ö¤Ã¶¾ÙµÄ¸÷ÏîÖµ¶¼ÊÇ 2 µÄÃݼ´¿É¡£±ÈÈ磺

1: 00000001
2: 00000010
4: 00000100
8: 00001000

ÔÙÍùºóÔö¼ÓµÄ»°¾ÍÊÇ 16¡¢32¡¢64...£¬ÆäÖи÷Öµ²»ÂÛÔõôÏà¼Ó¶¼²»»áºÍ³ÉÔ±µÄÈÎÒ»Öµ³åÍ»¡£ÕâÑùÎÊÌâ¾Í½â¾öÁË£¬ËùÒÔÎÒÃÇÒªÕâÑù¶¨Òå Roles ö¾ÙµÄÖµ£º

[Flags]
public enum Roles
{
Admin = 1,
Member = 2,
Manager = 4,
Operator = 8
}

²»¹ýÔÚ¶¨ÒåÖµµÄʱºòÒªÔÚÐÄÖÐСС¼ÆËãһϣ¬Èç¹ûÄãÏëÀÁÒ»µã£¬¿ÉÒÔÓÃÏÂÃæÕâÖÖ¡°Î»ÒÆ¡±µÄ·½·¨À´¶¨Ò壺

[Flags]
public enum Roles
{
Admin = 1 << 0,
Member = 1 << 1,
Manager = 1 << 2,
Operator = 1 << 3
}

Ò»Ö±ÍùϵÝÔö±àÖµ¼´¿É£¬ÔĶÁÌåÑéºÃ£¬Ò²²»ÈÝÒ×±à´í¡£Á½ÖÖ·½Ê½ÊǵÈЧµÄ£¬³£Á¿Î»ÒƵļÆËãÊÇÔÚ±àÒëµÄʱºò½øÐеģ¬ËùÒÔÏà±È²»»áÓжîÍâµÄ¿ªÏú¡£

×ܽá

±¾ÎÄͨ¹ýÒ»µÀССµÄÃæÊÔÌâÒý·¢Ò»Á¬´®¶Ôö¾ÙµÄ˼¿¼¡£ÔÚСÐÍϵͳÖУ¬°ÑÓû§½Çɫֱ½Ó´æ´¢ÔÚÓû§±íÊǺܳ£¼ûµÄ×ö·¨£¬´Ëʱ°Ñ½ÇÉ«×Ö¶ÎÉèΪÕûÐÍ£¨±ÈÈç int£©ÊDZȽϺõÄÉè¼Æ·½°¸¡£µ«Óë´Ëͬʱ£¬Ò²Òª¿¼Âǵ½Ò»Ð©×î¼Ñʵ¼ù£¬±ÈÈçʹÓà Flags ÌØÐÔÀ´°ïÖú¸üºÃµÄµ÷ÊÔºÍÈÕÖ¾Êä³ö¡£Ò²Òª¿¼Âǵ½Êµ¼Ê¿ª·¢Öеĸ÷ÖÖDZÔÚÎÊÌ⣬±ÈÈç¶à¸öö¾ÙÖµ½øÐлò£¨¡®|¡¯£©ÔËËãÓë³ÉÔ±Öµ·¢Éú³åÍ»µÄÎÊÌâ¡£

   
3402 ´Îä¯ÀÀ       29
 
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
 
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
 
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]
 
×îÐÂÎÄÕÂ
.NET Core 3.0 Õýʽ¹«²¼£ºÐÂÌØÐÔÏêϸ½â¶Á
.NET Core²¿ÊðÖÐÄã²»Á˽âµÄ¿ò¼ÜÒÀÀµÓë¶ÀÁ¢²¿Êð
C# eventḬ̈߳²È«
¼òÎö .NET Core ¹¹³ÉÌåϵ
C#¼¼ÊõÂþ̸֮À¬»ø»ØÊÕ»úÖÆ(GC)
×îпγÌ
.NetÓ¦Óÿª·¢
C#¸ß¼¶¿ª·¢¼¼Êõ
.NET ¼Ü¹¹Éè¼ÆÓëµ÷ÊÔÓÅ»¯
ASP.NET Core Web ¿ª·¢
ASP.Net MVC¿ò¼ÜÔ­ÀíÓëÓ¦Óÿª·¢
³É¹¦°¸Àý
º½Ìì¿Æ¹¤¼¯ÍÅ×Ó¹«Ë¾ DotNetÆóÒµ¼¶Ó¦ÓÃÉè¼ÆÓ뿪·¢
ÈÕÕÕ¸Û¼¯ .NET Framewor
Éñ»ªÐÅ .NETµ¥Ôª²âÊÔ
̨´ïµç×Ó .NET³ÌÐòÉè¼ÆÓ뿪·¢
Éñ»ªÐÅÏ¢ .NETµ¥Ôª²âÊÔ