简单介绍C#User类

.Net Framework的类库功能已经非常强大,但它不可能考虑到业务的方方面面,如果需要使用一个根本就不存在的对象,此时就需要自己来设计了。例如图书管理系统,可能就需要用户,图书等对象。这就需要开发者自己来设计这些对象。

创新互联长期为上千客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为昭平企业提供专业的网站设计、网站制作,昭平网站改版等技术服务。拥有10余年丰富建站经验和众多成功案例,为您定制开发。

既然最能体现“对象”思想的类型是“类”,我就来介绍一下C#中的类类型。C#中类的关键字是class。在一个class对象中,主要分为field(字段)、property(属性)和method(方法),前面两个对应的是对象的属性,而method则对应对象的行为。一个典型的class定义如下所示:

 
 
 
  1. publicclassUser  
  2. {  
  3. privatestringm_name;  
  4. privatestringm_password;  
  5. privateintm_tryCounter;  
  6. publicstringName  
  7. {  
  8. get{returnm_name;}  
  9. set{m_name=value;}  
  10. }  
  11. publicstringPassword  
  12. {  
  13. get{returnm_password;}  
  14. set{m_password=value;}  
  15. }  
  16. publicvoidSignIn()  
  17. {  
  18. if(m_tryCounter<3)  
  19. {  
  20. if(IsValid())  
  21. {  
  22. m_tryCounter=0;  
  23. Console.WriteLine("User{0}wassignedin.",m_name);  
  24. }  
  25. else  
  26. {  
  27. m_tryCounter++;  
  28. Console.WriteLine("User{0}isinvalid.Can’tSignin.",m_name);  
  29. }  
  30. }  
  31. else  
  32. {  
  33. Console.WriteLine("Youtrytosigninmorethan3times.Youarebedenied.");  
  34. }  
  35. }  
  36. publicvoidSignOut()  
  37. {  
  38. m_tryCounter=0;  
  39. Console.WriteLine("User{0}wassignedout.",m_name);  
  40. }  
  41. privateboolIsValid()  
  42. {  
  43. if(m_name.ToUpper()=="ADMIN"&&m_password=="admin")  
  44. {  
  45. returntrue;  
  46. }  
  47. else  
  48. {  
  49. returnfalse;  
  50. }  
  51. }  

字符串m_name,m_password,m_tryCounter就是类User的字段,Name,Password是类User的属性,而SignIn、SignOut和IsValid则是类User的方法。

前面说到对象好比是一个积木,设计者需要定义好这个积木的外观和形状,也要考虑积木内部的制作,例如选用的材质,以及是空心还是实心。如果将这个积木剖开来看,实际上该对象应分为内、外两层。由于使用者只关心外部的实现,因此设计者就需要考虑,哪些实现应暴露在外,哪些实现应隐藏于内。这就体现了对象的封装的思想。

封装对象,并非是将整个对象完全包裹起来,而是根据具体的需要,设置使用者访问的权限。在C#中,分别用修饰符public,internal,protected,private设定,分别修饰类的字段、属性和方法,甚至于类对象本身:
◆public:表明所有对象都可以访问;
◆protected internal:表明同一个程序集内的对象,或者该类对象以及其子类可以访问;
◆internal:表明只有同一个程序集的对象可以访问;
◆protected:表明只有该类对象及其子类对象可以访问;(关于继承,会在以后介绍)
◆private:表明只有对象本身在对象内部可以访问;

可以看出,public的开放性***,其次是protected internal,private的开放性最小。internal和protected居中。那么,internal和protected哪一个开放范围更大呢?我认为,没有完全绝对的结论。它们的范围前者体现一个横向的概念,后者则体现纵向的概念。如果是internal,那么外部程序集对象自然不能访问,但只要是居于同一个程序集中,则所有对象都可以访问它;如果是protected,那么即使是外部程序集对象,只要它继承了该对象,就可以访问,而即使是同一程序集,如果对象不是该类对象的子类,也是无法访问的。打一个比方,在我们的传统文化中,是非常强调“宗族”观念的,一个宗族的族长,对于本族人而言,权力极大,甚至掌握了生杀大权。以一个州府的范围为例,internal就好比是知府大人,只要是该州府的百姓,都属于他的管辖范围,而不管他是哪一个宗族。protected则好比是宗族的族长,只要是这个宗族的成员,都要服从他,哪怕该成员属于其他州府。我以前看过《雍正王朝》,其中就有这样一个情节,身为皇子的胤祯,竟然无法挽救自己心爱女人的命运,因为这个女人违反了她们宗族的族规,***眼看着她被活活烧死,却只能黯然神伤,梦里萦回。

以前面定义的C# User类而言,所有的字段m_name,m_password,m_tryCounter都是private的,因此C# User类的外部调用者无法调用它们,但请注意User类内部的方法比如SignIn或者属性Name,却完全可以调用。同样的,private方法IsValid,可以被SignIn方法调用,但对于外部调用者而言,则是无法调用的。而对于public属性Name,Password,public方法SignIn和SignOut,外部的调用者是可以访问的。在后面的演练中,我们能够看出这之间的区别。通过这样分层次的封装,就可以充分保证对象的重用性和安全性。

那么对于类类型而言,如何确定它们的访问权限呢?这要根据实际的需求来看了。假定这个User类是用于一个电子商务网站。那么电子商务系统在设计过程中,就需要调用到C# User类对象。显然,登录与退出功能是必须提供给外部使用者的,例如登录页面就会使用到C# User类。而IsValid()方法用于验证用户的合法性,虽然也非常必要,但该功能仅仅用于登录的时候核实用户身份,也就是说,IsValid方法只会被 SignIn方法使用,但外部实用者却并不关心,因此,设置为private就是合理的。同样的道理,字段m_tryCounter也是如此。但如果需求发生改变,验证用户的功能不仅仅是登录的时候需要使用,在添加商品到购物车,下订单,付款的时候,都需要该功能,那么IsValid方法,就有必要修改为 public方法了。

所以,在设计程序的时候,除了要考虑识别对象,还要充分考虑该对象的封装。类对象内的字段、属性和方法,包括类本身,哪些应该暴露在外,哪些应该被隐藏,都需要根据实际的需求,给与正确的设计。

【编辑推荐】

  1. 分析C#不安全代码
  2. 浅析C#调用ImageAnimator
  3. C#连接Access、SQL Server数据库
  4. 浅谈C#固定的和活动的变量
  5. 介绍C#中的值类型

网页标题:简单介绍C#User类
网页URL:http://www.hantingmc.com/qtweb/news19/483019.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联