您的位置:首页 > 编程语言 > C#

C#基础 结构、枚举、表达式、运算符

2011-07-12 15:39 609 查看
<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog336280.html" frameborder="0" width="336" scrolling="no" height="280"></iframe> CodeProject的这篇文章确实对我有所启迪,
http://www.codeproject.com/useritems/SessionWrapper.asp#xx1208856xx

诚如作者所说,我们经常在ASP.NET用许多类似于下面的代码来检测Session中存储的对象,来防止Session过期后存储的变量丢失问题:
Int32 nUserID = -1;
if ( null != Session["userID"] ) {
if ( Session["userID"] is Int32 ) {
if ( 0 nUserID = (Int32) Session["userID"]
}
}
}
if ( -1 == nUserID )
{
throw new ApplicationException ( "Unexpected situation: userID invalid." );
}

this.doSomething( nUserID );
这样的代码会遍布各处。

那么,利用他的这个封装方案来做重构,确实让代码简洁干净了不少!
经过他的封装,上面的代码用这么一句话就行了:

this.doSomething( CCurrentSession.UserID )

他的类其实也很简单,如下所示:


usingSystem;


usingSystem.Web;






/**////--------------------------------------------------------------------


///DevelopedbyM.vanEijkel-aug2005


///[e]:marcelvaneijkel@gmail.com


///[w]:www.vaneijkel.com




namespaceVanEijkel.Web






{




/**////<summary></summary>


///Wrapperclassforthesessionobject.


///Itcentralizesthelogicforretrievingandvalidationofsessioninformation.


///Byusinganapproachlikethisyouimprovetheprotectionandencapsulationofexistingcode.


///Itoffersasimple,low-risk,easymanageablewaytoimproveexistingWebApplication.


///Therfore,IcallitwebRefactoring.


///


publicclassCurrentSession






{




Constants#regionConstants


privateconstStringsMANDATORY_SESSION_KEY_NOT_FOUND_MSG="Sessionvariableexceptedbutdoesnotexist.Key={0}";


privateconstStringsMANDATORY_SESSION_VALUE_INVALID_NULL="Nonenullsessionvalueexcepted.Key={0}";




privateconstInt32nUSERID_UNKOWN=-1;


privateconstInt32nUSERID_MINIMUM=1;


privateconstStringsUSERID_INVALID="InvalidUserID:{0}.UserIDshouldbelargerthan:{1}";


#endregion






UserID#regionUserID




/**////<summary></summary>


///ReturnstheuserIDasaInt32insteadofanobject.


///Thiswayyouwillgetthecompilerprotectionandintelligencesupportyouneed.


///


publicstaticInt32UserID






{


get






{


return(Int32)GetValueOrDefault(eKeys.UserID,nUSERID_UNKOWN);


}


set






{


if(nUSERID_MINIMUM>=value)






{


thrownewApplicationException(String.Format(sUSERID_INVALID,value,nUSERID_MINIMUM));


}


SetValue(eKeys.UserID,value);


}


}


#endregion






private:GetValueOrDefault(eKeyseKey,ObjectoDefaultValue)#regionprivate:GetValueOrDefault(eKeyseKey,ObjectoDefaultValue)




/**////<summary></summary>


///Getsthevaluefromthesessionobject.


///


///Thesessionkeytogetthevaluefor.


///Thedefaultvaluetouseifnovalidvaluestored.


///<returns></returns>Whenthevalueisnullorthekeydoesnotexist,


///thespecifieddefaultvalueisreturned.


///Otherwise,thevalueisreturned


privatestaticobjectGetValueOrDefault(eKeyseKey,ObjectoDefaultValue)






{


//getthevalue


objectoValue=GetValue(eKey);




//valuenotfoundornull?


if(null==oValue)






{


//returndefaultvalue


returnoDefaultValue;


}




//everythingoke:returnsessionvalue


returnoValue;


}


#endregion




private:GetMandatoryValue(eKeyseKey)#regionprivate:GetMandatoryValue(eKeyseKey)




/**////<summary></summary>


///Returnsthesessionvalueforasession-keythatmustexist.


///IfthekeydoesnotexistanapplicationExceptionisthrown.


///


///Thesession-keytoreturnthesession-valuefor.


///<returns></returns>Anone-nullvalue.


privatestaticobjectGetMandatoryValue(eKeyseKey)






{


//getthevalue


objectoValue=GetValue(eKey);




//keynotfoundorvaluenull?


if(null==oValue)






{


//throwapplicationExceptionbecauseitsapplicationlogicerror(noneCLR)


thrownewApplicationException(String.Format(sMANDATORY_SESSION_KEY_NOT_FOUND_MSG,eKey.ToString()));


}




//everythingoke:returnvalue


returnoValue;


}


#endregion




private:GetValue(eKeyseKey)#regionprivate:GetValue(eKeyseKey)




/**////<summary></summary>


///Getsthesessionvaluefromthespecifiedkey.


///


///Thekeytogetthevaluefrom


///<returns></returns>Thesessionvalueforthespecifiedsessionkey.


///Ifthekeydoesnotexist,nullisreturned.


///


privatestaticobjectGetValue(eKeyseKey)






{


returnHttpContext.Current.Items[eKey.ToString()];


}


#endregion






privateSetMandatoryValue(eKeyseKey,ObjectoValue)#regionprivateSetMandatoryValue(eKeyseKey,ObjectoValue)


privatestaticvoidSetMandatoryValue(eKeyseKey,ObjectoValue)






{


if(null==oValue)






{


thrownewApplicationException(String.Format(sMANDATORY_SESSION_VALUE_INVALID_NULL,eKey.ToString()));


}


}


#endregion




privateSetValue(eKeyseKey,ObjectoValue)#regionprivateSetValue(eKeyseKey,ObjectoValue)




/**////<summary></summary>


///Storesthespecifiedsession-valuetothespecifiedsession-key.


///


///Thekeyforthevaluetostoreinthesession.


///Thevaluetostoreinthesession


privatestaticvoidSetValue(eKeyseKey,ObjectoValue)






{


HttpContext.Current.Items[eKey.ToString()]=oValue;


}


#endregion






/**////<summary></summary>


///Anenumforthe


///


privateenumeKeys






{


UserID


}


}


}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: