C#中??和?分别是什么意思? 在ASP.NET开发中一些单词的标准缩写 C#SESSION丢失问题的解决办法 在C#中INTERFACE与ABSTRACT CLASS的区别 SQL命令语句小...

C#中??和?分别是什么意思?

 

  在C#中??和?分别是什么意思?



1. 可空类型修饰符(?):
引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空。
例如:string str=null; 是正确的,int i=null; 编译器就会报错。
为了使值类型也可为空,就可以使用可空类型,即用可空类型修饰符"?"来表示,表现形式为"T?"
例如:int? 表示可空的整形,DateTime? 表示可为空的时间。
T? 其实是System.Nullable(泛型结构)的缩写形式,也就意味着当你用到T?时编译器编译 时会把T?编译成System.Nullable的形式。
例如:int?,编译后便是System.Nullable的形式。

2. 三元(运算符)表达式(?:):
例如:x?y:z 表示如果表达式x为true,则返回y;如果x为false,则返回z,是省略if{}else{}的简单形式。

3. 空合并运算符(??):
用于定义可空类型和引用类型的默认值。如果此运算符的左操作数不为null,则此运算符将返回左操作数,否则返回右操作数。
例如:a??b 当a为null时则返回b,a不为null时则返回a本身。
空合并运算符为右结合运算符,即操作时从右向左进行组合的。如,“a??b??c”的形式按“a??(b??c)”计算。



在ASP.NET开发中一些单词的标准缩写

有些词可能共用一些缩写。带星号的缩写或词来源于PeopleSoft标准。

The following standard word abbreviations should be used in naming records, fields, and SQRs:

 

 

 

Word(s)AbbreviationDescription
Abbreviate
Abbreviation
ABRV 
AcademicACAD 
Accept
Acceptance
Accepted
ACPT 
AccessACCS 
AccidentACDNT 
Accomplish
Accomplishment
Accomplishments
ACMP 
Account*ACCT* 
Accounting*ACCTG* 
Accounts Payable
Advanced Placement
AP 
Accounts ReceivableAR 
AccreditedACRD 
AccrualACRL 
Accumulated*ACCUM* 
Accumulation
Accumulative
ACUM 
Achieve
Achievement
ACHV 
Acquisition*ACQ* 
Act
Active
Activity
American College Test
ACT 
Action*ACTN* 
ActualACTL 
Add
Added
ADD 
Additional*ADDL* 
Address*ADDR*Narrative data which describes a person, place or thing's location
Ad hocADHC 
Adjudicate
Adjudicated
Adjudication
ADJD 
Adjusted Gross IncomeAGI 
Adjustment*ADJ* 
Administered
Administrated
Administration
ADM 
Admissible
Admission
ADMS 
Admittance
Admitted
ADMT 
Advanced Placement
Accounts Payable
AP 
AdviceADVC 
AffiliationAFFL 
AfterAFT 
AgeAGE 
AgencyAGCY 
AgentAGNT 
AidAID 
AlienALN 
AllALL 
Allocate
Allocation*
ALLOC* 
AlphaALPH 
Alter
Alternate
ALT 
Alumni
Alumnus
ALMN 
AMAM"Ante Meridiem" (morning)
American College Test
Act
Active
Activity
ACT 
Amount*AMT*Monetary value(s)
AnalysisANLS 
Annual*ANNL* 
AnonymousANON 
AnswerANS 
ApartmentAPT 
Appeal
Appealed
APEL 
Applicant*APP* 
Application*APPL* 
AppointmentAPPT 
Approval
Approve
APRV 
AreaAREA 
ArrayARAY 
ArrearsARRS 
AscendingASC 
Assign
Assigned
Assignment
ASGN 
AssociationASSC 
AssumptionASMP 
Athlete
Athletic
ATHL 
AttachATCH 
AttemptATMPT 
Attend
Attendance
ATND 
AttentionATTN 
AttributeATTR 
Audit
Audited
ADT 
Authority
Authorize
AUTH 
AuxiliaryAUX 
Availability
Available
AVL 
AverageAVGThe mean of two or more numbers
Average Cumulative GradeACG 
Award
Awarded
AWRD 
Balance*BAL*The net value (balance) of an account
BankBNK 
BargainBARG 
Base
Basic
BAS 
BatchBTCH 
BeforeBEF 
Begin
Beginning
BEGN 
Beginning of TermBOT 
BenefitsBEN 
BidBID 
Bill
Billing
BILL 
Billing and Receivables SystemBRS 
BirthBRTH 
BoardBRD 
BreakBRK 
Budget
Budgetable
BUD 
Budget Balance AccountBBA 
Build
Building
BLD 
BusinessBUS 
Business Unit*BU* 
Buy
Buyer
BUY 
Calculate
Calculated
Calculation*
CALC* 
Calendar*CAL* 
CallCALL 
CampaignCMPN 
CampusCMPS 
Cancel
Canceled
CAN 
CapacityCAP 
CapitalizationCPLZ 
CardCRD 
CareerCAR 
CarrierCRIR 
CartridgeCART 
CaseCSE 
CashCSH 
CatalogCTLG 
Category*CATG* 
CensusCENS 
CenterCTR 
Certificate
Certification
CERT 
Change
Changed
CHG 
ChapterCHAP 
ChargeCRG 
ChartfieldCHARTF 
Check
Checked
CHK 
Citizen
Citizenship
CTZN 
CityCTY 
ClassCLAS 
Clear
Cleared
CLR 
CLEPCLEP 
CloseCLO 
ClubCLB 
COBRA*CBR* 
Code*CD*Data which represents encoded values (translate or code table)
Collect
Collection
CLCT 
CollegeCOLG 
ColumnCLMN 
Combination
Combine
COMB 
CommandCMD 
CommentCMTAn explanatory, illustrative or critical note, remark or observation
CommitteeCMMTTEE 
Company*CO* 
Comparative*COMPA* 
CompetitorCPTR 
Complete
Completion
Compliance
CMPL 
ComponentCMPTWhen the meaning is "part", use abbreviation "PRT".
Composite
Compensation
COMP 
ConditionalCOND 
ConfidentialCNFD 
Confirm
Confirmation*
CONF* 
ConstantCNST
CST
Data which is unchanging or invariable
ContactCTCT 
Continue
Continuing
Continuous
CONT 
Contract
Contractor
CNTR 
Control*CNTL* 
Conversation*CONVR* 
Conversion*
Convert*
Converted
CNV* 
CorrespondenceCRSP 
CostCOST 
Count
Counter
CNTA number of people or things that have been "counted", such as inventory cycle count
CountryCTRY 
CountyCNTY 
Course*CRSE* 
Coverage*COVRG* 
CreateCRE 
CredentialCRDL 
Credit*CR*
CRDT
Use "CR" for field names relating to financial data
Use "CRDT" for field names relating to academic work
CREFCREF 
CrossCRS 
Cross List
Cross Listed
XLST 
Cross ReferenceXREF 
CumulativeCUM 
Currency*CURR* 
Current*CUR* 
CursorCRSR 
CustodianCSTN 
Customer*CUST* 
DailyDLY 
DataDATA 
Data ProcessingDP 
Date*DT*A calendar day, month, and year (including century)
Date-Time StampDTTM 
Day*DD*
DY*
A day of the week (Sunday, Monday, etc.)
Dead
Death
Deceased
DEAD 
Debit*DR* 
DecimalDEC 
Deduct
Deduction*
DED* 
Default*DFLT* 
DeficitDFCT 
Definition*DEFN* 
DegreeDEG 
DeleteDEL 
Deliver
Delivery
DLVR 
DemoDMO 
DentalDNTL 
Department*DEPT* 
Department of Motor VehiclesDMV 
Dependency
Dependent*
Depends
DEP* 
DepositDPST 
Depreciation*DEPR* 
Description*DESCR*
DSC
Narrative data which translates a code or number. When a suffix, use "_DSC" (see Standard Field Name Suffix table).
DesignDSGN 
Destination*DEST* 
Detail*DETL* 
Develop
Development
Deviation
DEV 
Difference
Differential
DIFF 
DigitDGT 
Direct
Direction
Directional
DIR 
Disability
Disabled
DISA 
Disbursed
Disbursement
DSB 
Discount*DISC* 
DisplacementDSPL 
DisplayDISP 
DispositionDSP 
Distribute
Distribution*
DIST* 
DistrictDSTR 
DivisionDIV 
Division of Continuing EducationDCE 
DocumentDOC 
DonorDONR 
DownDN 
Drive
Driver
DRV 
DropDRP 
DueDUE 
Duplicate*
Duplication
DUP* 
EachEA 
EarlyERLY 
Earn
Earned
Earnings*
EARN* 
Earned Income CreditEIC 
Educate
Education
EDU 
Effect
Effective*
EFF* 
Effective Date*EFFDT* 
Effective Date Sequence*EFFSEQ* 
EffortEFRT 
Elect
Elected
Elective
ELCT 
Electronic Data InterchangeEDI 
Electronic Funds TransferEFT 
Electronic MailEM 
Eligibility*
Eligible
ELIG* 
EmergencyEMRG 
EmphasisEMPH 
Employee*EE*
EMPL
 
Employee ID*EMPLID* 
Employer*ER* 
EmploymentEMPLMT 
Encumber
Encumbrance
ENCB 
End
Ending
END 
End of TermEOT 
Endorse
Endorsement
ENDR 
EndorsementENDR 
Endow
Endowment
ENDW 
Engineer
Engineering
ENGN 
EnglishENGL 
EnrichmentENRCH 
EnrollmentENRL 
Enter
Entered
Entry
ENTR 
Entitle
Entitlement
ENTL 
Equal
Equality
Equivalence
Equivalent
EQ 
Equal Employment Opportunity
Equal Opportunity
EEO 
EquipEQP 
ErrorERR 
EstablishmentESTB 
EthnicETHN 
Evaluation
Evaluator
EVAL 
EventEVNT 
ExamEXM 
ExceptionEXCP 
Exclude
Exclusion
EXCL 
Execute
Execution
EXEC 
Exempt
Exemption
EXMT 
Expect
Expected
EXPC 
Expected Family ContributionEFC 
ExpediteXPDT 
Expense
Export
Express
EXP 
ExperimentalEXPM 
Expiration
Expire
EXPR 
Export
Expense
EXP 
Extend
Extended
Extension
EXT 
ExternalEXTR 
FacilityFCLT 
FacultyFAC 
FamilyFMLY 
Family Eduaction Rights and Privacy ActFERPA 
FastFST 
FatherFATH 
FederalFED 
Federal Labor and Security ActFLSA 
FeeFEE 
Feet
Full Time
FT 
FICAFICA 
Field
Fields
FLD 
FileFILE 
FinalFNL 
Financial*FIN* 
Financial AidFA 
FineFINE 
FirstFRST 
FiscalFISC 
Fiscal YearFY 
Fiscal Year to DateFYTD 
Fix
Fixed
FIX 
FlagFLG
SW
Data which functions as a flag or indicator. Used with only two possible states/conditions. Data should normally be "Y" or "N".
Flexible Spending AccountFSA 
FloorFLR 
ForFOR 
ForeignFGN 
Foreign KeyFK 
FormFRM 
FormatFMT 
FormerFORMR 
FreeFREE 
Free Application for Federal Student AidFAFSA 
Free on BoardFOB 
Freeze
Frozen
FRZ 
Frequency*FREQ* 
Fresh
Freshman
FRSH 
FromFR 
Fulfill
Fulfilled
FULF 
Full TimeFT 
Full Time EquivalentFTE 
Function
Functional
FCN 
Fund
Funding
FUND 
FutureFUT 
Garnishment*GARN* 
GeneralGENL 
General Education DegreeGED 
General LedgerGL 
Geographic
Geography
GEOG 
GiftGFT 
GlobalGLBL 
GovernmentGOVT 
GradeGDE
GRD
A value assigned to reflect performance or position on a scale
Grade Point AverageGPA 
GraduateGRAD 
Grant
Granted
GRNT 
GrossGROS 
GroupGRP 
GuaranteeGUAR 
Guaranteed Student LoanGSL 
GuestGST 
Handicap
Handicapped
HAND 
HeadHEAD 
Header*HDR* 
HealthHLTH 
Held
Hold
HLD 
HelpHLP 
HierarchyHIER 
HighHNormally used in conjunction with another word (i.e., High School abbreviated as "HS").
High SchoolHS 
High School ServicesHSS 
Higher EducationHED 
HighwayHWAY 
HireHIRE 
HistoryHST 
HomeHM 
HonorHONR 
Honor SocietyHSC 
HospitalHOSP 
HourHHA duration of time expressed in hours
HourlyHRLY 
Hours*HRS* 
House
Housing
HSE 
HowHOW 
Human ResourcesHR 
Human Resource SystemHRS 
Identification
Identifier*
Indicator
ID*Alphanumeric data which identifies a person, place, or thing
ImageIMG 
Immune
Immunization
IMUN 
ImpactIMPC 
ImplementationIMPL 
ImportIMP 
Import/ExportIMPEXP 
InchIN 
IncludeINCL 
IncomeINCM 
Increase
Increment
INCR 
IndexINDX 
IndicatorID
IND
 
IndividualINDV 
Individual Student Information ReportISIR 
InformationINFO 
Initial
Initialize
INIT 
Injury*INJ* 
InoculationINOC 
InputINPT 
InquiryINQ 
InsertISRT 
InstitutionINST 
Instruction
Instructional
Instructor
ISTR 
Instructional Need Analysis SystemINAS 
InsuranceINS 
Inter-Unit*IU* 
InterestINT 
Interface*INTFC* 
InternalINTR 
InternationalINTL 
IntervalINVL 
Interview
Interviewer
INTV 
InventINVN 
InventoryINV 
Investment*INVEST* 
Invitation
Invite
INVT 
InvoiceINVC 
Issue
Issued
ISS 
ItemITM 
JobJOB 
Journal*JRNL* 
JuniorJR 
Junior ScienceJS 
KeyKEY 
LabelLBL 
LaborLBR 
LaboratoryLAB 
LanguageLNG 
Last
List
LST 
LateLATE 
LatitudeLAT 
LayoffLAYF 
LeaveLV 
LectureLCTR 
Ledger*LED* 
LegalLGL 
LenderLNDR 
Length*LEN* 
LetterLTR 
LevelLVL 
LiaisonLISN 
Liberal EducationLBD 
LibraryLIB 
LicenseLIC 
License Plate NumberLIC_PLTE_NBR 
LifeLIFE 
Limit*LIM* 
Line*
Loan
LN* 
Link
Linked
LNK 
LiquidLIQ 
List
Last
LST 
LiteralLTRL 
LoadLOAD 
Loan
Line*
LN 
Locate
Location*
LOC* 
LockLK 
LockerLKR 
LogLOG 
Log onLOGON 
Long
Longest
LONG 
Long Term CareLTC 
Long Term DisabilityLTD 
LongitudeLON 
LotLOT 
LowLOW 
Mail
Mailer
Mailing
MAIL 
Maintenance*MAINT* 
MajorMJR 
MakeMK 
ManagerMGR 
MapMAP 
MaritalMRTL 
Message Agent ServerMAS 
MaskMSK 
Master Academic Records SystemMARS 
Match
Matching
MTCH 
MathMTH 
Matriculated
Matriculation
MTRC 
Maximum*MAX* 
Medical
Medicinal
MED 
Meet
Meeting
MT 
MemberMBR 
MembershipMSHP 
Memo
Memorandum
MMO 
MemorialMEMR 
MerchandiseMERCHNDS 
MerchantMERCH 
MeritMERT 
Message
Messages*
MSG* 
MeterMTR 
MethodMETH 
MicrofilmMFILM 
MiddleMID 
MilitaryMIL 
Minimum*MIN* 
MinorMINR 
MinuteMNT
MM
A duration of time expressed in minutes
MiscellaneousMISC 
ModeMDE 
Modification
Modifier
MOD 
Monetary
Money
MONY 
Month*MM*
MN*
A calendar month in numeric form (e.g., 01=January)
Month-to-Date*MTD* 
MoreMORE 
MotherMOTH 
MoveMOVE 
MultipleMULT 
NameNM
NME
Word(s) by which a person, place or thing is commonly known
NationalNATL 
National Association of College and University Business OfficersNACUBO 
National Student Loan Direct SystemNSLDSCommonly known as the "Perkins Loan"
NavigationNAV 
NewNEW 
NextNXT 
Next of KinNOK 
No ChargeNC 
No CreditNOCR 
No PrintNPRT 
NominalNOM 
NonNON 
Non-Personal ServicesNPS 
NotNOT 
Not ApplicableNA 
Note
Notice
Notification
Notify
NOTE 
Number*
Numeric
NBR*Numeric data which identifies a person, place, or thing
Object
Objective
OBJ 
OccupationOCP 
OccursOCC 
Offer
Offered
OFFR 
OfficeOFFC 
OfficerOFCR 
OfficialOFCL 
OldOLD 
OnlineONLN 
OpenOPN 
Operator*OPR* 
Option
Optional
Options
OPT 
OrderORDR 
Organization
Organize
ORG 
OrientationORNT 
Origin
Original
Origination
ORIG 
OtherOTHR 
OutOUT 
OverOVR 
OverheadOH 
OverrideOVRD 
OvertimeOT 
Own
Owned
OWN 
OwnerOWNR 
PackagedPACK 
PaidPAID 
PaperPPR 
Parameter*PARM* 
ParentPAR 
Parity
Priority
PRTY 
ParkPRK 
Part
Partial
PRT 
Part TimePT 
ParticipationPRTP 
Pass
Passed
PASS 
PastPAST 
PatronPTRN 
Pay
Payable
Payment
PAY 
PayrollPYRL 
PedestrianPED 
Pell (Pell Grant)PEL 
PendingPEND 
PensionPENS 
Percent*
Percentage
Percentile
PCT*Part of a whole expressed in hundredths
Period*PD* 
Period-to-Date*PTD* 
Perkins LoanNSLDSCommon name for National Student Loan Direct System
PermanentPERM 
PermitPRMT 
PersonPERS 
Personal
Personnel
PSNL 
Personal IdentificationPIN 
Personnel Action NotificationPAN 
PhonePHN 
PhysicsPHYS 
PlacePLCE 
PlanPLN 
PlatePLTE 
PledgePLDG 
PMPM"Post Meridiem" (afternoon)
PointPNT 
PolicyPLCY 
Position*POSN* 
Post
Posted
POST 
PostalPSTL 
PotentialPOTN 
PredictedPRED 
Preference
Preferred
PREF 
PrefixPRFX 
PremiumPREM 
PrerequisitePREQ 
PrescribedPSCR 
PresentationPRST 
PresidentPRES 
Previous
Prior
PREV 
PricePRC 
Price LevelPL 
PrimaryPRIM 
Primary KeyPK 
Principal
Principle
PRIN 
Principal InvestigatorPI 
Print
Printed
PRN 
Prior
Previous
PREV 
Priority
Parity
PRTY 
Probation
Problem
PROB 
Procedure
Process
PROC 
Profession
Professional
PRFS 
ProficiencyPRFC 
Profile*PROF* 
ProgramPROG 
Project
Projected
PROJ 
PromissoryPRMS 
PromotionPROM 
ProposalPRPS 
ProspectPRSP 
ProvincePRVN 
PurchasePUR 
Purchase OrderPO 
PurgePRG 
PurposePURP 
Qualitative
Quality
QAL 
Quantitative
Quantity*
QTY*A number of things other than money
Quantity-to-Date
Quarter-to-Date*
QTD* 
QuarterQTR 
QuestionQSTN 
RaceRACE 
RangeRNG 
RankRNKRelative standing or position
Rate*RT*Numeric value expressing amount per some unit of coverage
Read
Reading
READ 
Real
Reallocation
REAL 
Reason*RSN* 
RecallRCL 
ReceiptRCPT 
Receive
Received*
RECV* 
ReceiverRCVR 
RechargeRCHG 
Recognition
Recognize
RECG 
RecommendRCMD 
Reconciliation*RECON* 
Record*REC* 
Recreate
Recreation
RECR 
Recruit
Recruiting
RCRT 
Reduce
Reduced
Reduction*
RED* 
Refer
Reference*
Referral
Referred
REF* 
RefundRFND 
RegionalRGNL 
RegistrarREGR 
RegistrationREG 
Reject
Rejection
RJCT 
Relate
Relation
Relationship
RLAT 
ReleaseRLSE 
Religion
Religious
RELG 
RemainingRMNG 
ReminderRMDR 
RenewalRNWL 
Repeat
Repeatable
Repeated
REPT 
Replace
Replaced
REPL 
ReplyRPLY 
Report*RPT* 
Request*
Requested
Require
Required*
Requisition*
REQ* 
Requirements*RQMT* 
ResearchRES 
Reserve
Reserved
RSRV 
Reserve Officers Training CorpsROTC 
Residence
Residency
Resident
RSDT 
ResignRSGN 
ResourceRSRC 
ResponseRESP 
RestartRST 
RestockRSTK 
Restrict
Restricted
Restrictions
RSTR 
ResultRSLT 
Retire*
Retirement*
RET* 
RetroactiveRETR 
ReturnRTN 
RevenueREV 
ReviewRVW 
RevisionREVS 
RevokeREVK 
RollRL 
Roll upRLUP 
RoomRM 
RouteROUT 
RowROW 
RSVPRSVPFrench abbreviation meaning "please reply"
RunRUN 
Run ControlRUNCTL 
Salary*SAL* 
SaleSALE 
SalutationSLTN 
SameSM 
SaveSAVE 
ScaleSCAL 
Schedule*
Scheduled
Scheduling
SCHED* 
Scholar
Scholarship
SCHLR 
Scholastic
School
SCHL 
Scholastic Aptitude TestSAT 
ScienceSCI 
ScoreSCRA number that expresses merit or performance
ScreenSCRN 
SearchSRCH 
SecondSCND
SS
Use "SCND" for field names relating to number two in a countable series
Use "SS" for field names relating to a duration of time expressed in seconds
SectionSCTN 
Secure
Security*
SEC* 
SegmentSEG 
Select*
Selection
Selective
SEL* 
SemesterSEM 
Semi FinalistSEMF 
Senate
Senator
SEN 
SendSND 
SeniorSR 
SentSNT 
SeparateSEPR 
Sequence*SEQ* 
SerialSERL 
ServiceSERV 
Session*SESSN* 
SexSEX 
SharingSHR 
SheetSHET 
ShelterSHLT 
ShiftSHFT 
ShippingSHIP 
ShortSHRT 
SignSGN 
SimulatedSIM 
SiteSITE 
SizeSZ 
SkillSKL 
SkipSKP 
Social
Society
SOC 
Social Security NumberSSN 
SoftSFT 
SolidSLID 
SophomoreSOPH 
SortSRT 
SourceSRC 
Special
Specialty
SPCL 
Specific
Specification
SPEC 
Sponsor
Sponsored
SPON 
SportsSPRT 
SpouseSPSE 
SquareSQ 
StackSTCK 
StaffSTF 
StageSTG 
StampSTMP 
StandardSTD 
Standard DeviationSTDV 
Start
Starting
STRT 
StateST 
StatementSTMT 
StaticSTC 
Statistics*STAT* 
StatusSTS 
StepSTP 
StipendSTPD 
StockSTK 
StopSTOP 
StreetSTR 
StringSTRG 
StructureSTRC 
StudentSTU 
Student Academic RecordsSAR 
Student Credit HourSCH 
StudySTDY 
SubcampaignSCMP 
SubjectSUBJ 
SubordinateSUB 
SubsidiarySUBS 
SuffixSFX 
Summation
Summary*
SUM* 
Supervisor*
Support
SUP* 
Supplement
Supplemental*
SUPL* 
SurveySRVY 
SuspenseSUSP
SUSPN
 
SwitchFLG
SW
Data which functions as a flag or indicator. Used with only two possible states/conditions. Data should normally be "Y" or "N".
SystemSYS 
Table
Tables
TBL 
TakenTKN 
TapeTAPE 
TargetTRGT 
TaughtTGHT 
Tax
Taxable
TX 
Tax ID NumberTIN 
TeamTEAM 
TemperatureTEMP 
Template*TMPL* 
TemporaryTMP 
TenureTENR 
TermTRM 
TerminalTRML 
TerminateTRMT 
TestTST 
TextTXTNarrative informational data such as a message or error text
ThermidorTHERM13th Month
TIAATIAA 
TicketTKT 
TimeTMHours and minutes. May include seconds, hundredths of seconds.
Time keepingTMKP 
Time-stampTSA system generated Time-stamp
TitleTITL 
TodayTDY 
Total*TOT* 
TourTOUR 
TownCTY 
Track
Tracking
TRK 
TraditionalTRAD 
Training*TRN* 
Transact
Transaction*
TRANS* 
TranscriptTSCP 
Transfer*XFER* 
Translate
Translation
XLTMeaning "Crosswalk Table"
Transmit
Transmittal
XMIT 
TravelTRVL 
Tuition*TUIT* 
TypeTYP 
UndergraduateUGRD 
UnemploymentUNEMPL 
UnitUNIT 
Unit of Measure*UOM* 
UniversalUNVRSL 
UniversityUNIV 
UnpaidUNPD 
Unsecure
Unsecured
UNSEC 
Up ToMAX 
Update
Updated
UPDT 
UpperUPR 
US Department of EducationUSDE 
Use
Used
USE 
UserUSR 
Vacation*VACN* 
ValedictorianVLDC 
Valid
Validate
Validation
VLD 
ValueVAL 
VariableVAR 
Vehicle*VEH* 
VendorVEND 
VerbalVRBL 
Verify
Verified
VERF 
VeteranVET 
Vice PresidentVP 
ViolationVIO 
VisaVISA 
VisitVST 
VoucherVCHR 
W2W2 
W4W4 
W9W9 
WaivedWVED 
Week
Work
Worked
Worker(s)
WK 
WidthWID 
WithWNormally used as part of a compound word (i.e., Withdrawl abbreviated as "WDRL").
WithdrawalWDRL 
Withhold
Withholding
WHLD 
WomenWMN 
WorksheetWKST 
Write
Written
WRT 
Year*YR*
YY*
A calendar year, including century (e.g., 1997)
Year-to-Date*YTD* 
ZipZIP 
ZoneZN

 

 

C#SESSION丢失问题的解决办法

关于c# SESSION丢失问题解决办法

 

我们在用C#开发程序的时候经常会遇到Session很不稳定,老是数据丢失。下面就是Session数据丢失的解决办法希望对您有好处。

1、在WEB.CONFIG文件中修改SESSION状态保存模式,如:<sessionState mode='StateServer' stateConnectionString='tcpip=127.0.0.1:42424' sqlConnectionString='data source=127.0.0.1;Trusted_Connection=yes' cookieless='true' timeout='180'/> 

2、启动系统服务“ASP.NET状态服务 ”,系统默认是手动启动的 

3、如果SESSION中保存的数据类型是自定义的,如结构,请在自定义数据类型处序列化会话状态,即在类或结构申明前加[Serializable] 

完成以上3部,状态即可保存,但是在访问页面是浏览器显示的路径中增加了一段字符,如:(S(lto3j0eg25cztmqtxevm5tb4)) 

最近在做ASP.NET项目时,测试网站老是取不出Session中的值,在网上搜索了一下,找到一些解决方法,记录在这里。最后使用存储在StateServer中的办法解决了问题。 


SessionState 的Timeout),其主要原因有三种。 
一:有些杀病毒软件会去扫描您的Web.Config文件,那时Session肯定掉,这是微软的说法。 
二:程序内部里有让Session掉失的代码,及服务器内存不足产生的。 
三:程序有框架页面和跨域情况。 
第一种解决办法是:使杀病毒软件屏蔽扫描Web.Config文件(程序运行时自己也不要去编辑它) 
第二种是检查代码有无Session.Abandon()之类的。 
第三种是在Window服务中将ASP.NET State Service 启动。 


下面是帮助中的内容: 
(ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconsessionstate.htm) 
ASP.NET 提供一个简单、易于使用的会话状态模型,您可以使用该模型跨多个 Web 请求存储任意数据和对象。它使用基于字典的、内存中的对象引用(这些对象引用存在于 IIS 进程中)缓存来完成该操作。使用进程内会话状态模式时请考虑下面的限制: 

使用进程内会话状态模式时,如果 aspnet_wp.exe 或应用程序域重新启动,则会话状态数据将丢失。这些重新启动通常会在下面的情况中发生: 
在应用程序的 Web.config 文件的 <processModel> 元素中,设置一个导致新进程在条件被满足时启动的属性,例如 memoryLimit。 
修改 Global.asax 或 Web.config 文件。 
更改到 Web 应用程序的 \Bin 目录。 
用杀毒软件扫描并修改 Global.asax 文件、Web.config 文件或 Web 应用程序的 \Bin 目录下的文件。 
如果在应用程序的 Web.config 文件的 <processModel> 元素中启用了网络园模式,请不要使用进程内会话状态模式。否则将发生随机数据丢失。 


还有这二种: 

一:在第一个页面置了SESSION,然后REDIRECT去第二个页面。解决方法是在REDIRECT中设置endResponse为FALSE。 

二: ASP.NET中使用了ACCESS数据库,而且数据库是放在bin目录中的。解决方法是不要放会更新的文件在BIN目录中。 

参考:http://www.dotnet247.com/247reference/msgs/58/290316.aspx 


Asp.net 默认配置下,Session莫名丢失的原因及解决办法 


正常操作情况下Session会无故丢失。因为程序是在不停的被操作,排除Session超时的可能。另外,Session超时时间被设定成60分钟,不会这么快就超时的。 

这次到CSDN上搜了一下帖子,发现好多人在讨论这个问题,然后我又google了一下,发现微软网站上也有类似的内容。 

现在我就把原因和解决办法写出来。 



原因: 

由于Asp.net程序是默认配置,所以Web.Config文件中关于Session的设定如下: 
<sessionState mode='InProc' stateConnectionString='tcpip=127.0.0.1:42424' sqlConnectionString='data source=127.0.0.1;Trusted_Connection=yes' cookieless='true' timeout='60'/> 

我们会发现sessionState标签中有个属性mode,它可以有3种取值:InProc、StateServer?SQLServer(大小写敏感) 。默认情况下是InProc,也就是将Session保存在进程内(IIS5是aspnet_wp.exe,而IIS6是W3wp.exe),这个进程不稳定,在某些事件发生时,进程会重起,所以造成了存储在该进程内的Session丢失。 

哪些情况下该进程会重起呢?微软的一篇文章告诉了我们: 
1、配置文件中processModel标签的memoryLimit属性 
2、Global.asax或者Web.config文件被更改 
3、Bin文件夹中的Web程序(DLL)被修改 
4、杀毒软件扫描了一些.config文件。 
更多的信息请参考PRB: Session variables are lost intermittently in ASP.NET applications 



解决办法: 

前面说到的sessionState标签中mode属性可以有三个取值,除了InProc之外,还可以为StateServer、SQLServer。这两种存Session的方法都是进程外的,所以当aspnet_wp.exe重起的时候,不会影响到Session。 

现在请将mode设定为StateServer。StateServer是本机的一个服务,可以在系统服务里看到服务名为ASP.NET State Service的服务,默认情况是不启动的。当我们设定mode为StateServer之后,请手工将该服务启动。 

这样,我们就能利用本机的StateService来存储Session了,除非电脑重启或者StateService崩掉,否则Session是不会丢的(因Session超时被丢弃是正常的)。 

除此之外,我们还可以将Session通过其他电脑的StateService来保存。具体的修改是这样的。同样还在sessionState标签中,有个stateConnectionString='tcpip=127.0.0.1:42424'属性,其中有个ip地址,默认为本机(127.0.0.1),你可以将其改成你所知的运行了StateService服务的电脑IP,这样就可以实现位于不同电脑上的Asp.net程序互通Session了。 

如果你有更高的要求,需要在服务期重启时Session也不丢失,可以考虑将mode设定成SQLServer,同样需要修改sqlConnectionString属性。关于使用SQLServer保存Session的操作,请访问这里。 

在使用StateServer或者SQLServer存储Session时,所有需要保存到Session的对象除了基本数据类型(默认的数据类型,如int、string等)外,都必须序列化。只需将[Serializable]标签放到要序列化的类前就可以了。 
如: 
[Serializable] 
public class MyClass 

...... 
}

 

在C#中INTERFACE与ABSTRACT CLASS的区别

 1)在继承抽象类时,必须覆盖该类中的每一个抽象方法,而每个已实现的方法必须和抽象类中指定的方法一样,接收相同数目和类型的参数,具有同样的返回值,这一点与接口相同。
  2)当父类已有实际功能的方法时,该方法在子类中可以不必实现,直接引用的方法,子类也可以重写该父类的方法(继承的概念)。
  3)而实现 (implement)一个接口(interface)的时候,是一定要实现接口中所定义的所有方法,而不可遗漏任何一个。
  4)另外,抽象类不能产生对象的,但可以由它的实现类来声明对象。


A. 两者都是抽象类,都不能实例化。
B. interface实现类及abstrct class的子类都必须要实现已经声明的抽象方法。2. 不同
A. interface需要实现,要用implements,而abstract class需要继承,要用extends。
B. 一个类可以实现多个interface,但一个类只能继承一个abstract class。
C. interface强调特定功能的实现,而abstract class强调所属关系。
D. 尽管interface实现类及abstrct class的子类都必须要实现相应的抽象方法,但实现的形式不同。interface中的每一个方法都是抽象方法,都只是声明的(declaration, 没有方法体),实现类必须要实现。而abstract class的子类可以有选择地实现。这个选择有两点含义:
一是Abastract class中并非所有的方法都是抽象的,只有那些冠有abstract的方法才是抽象的,子类必须实现。那些没有abstract的方法,在Abstrct class中必须定义方法体。
二是abstract class的子类在继承它时,对非抽象方法既可以直接继承,也可以覆盖;而对抽象方法,可以选择实现,也可以通过再次声明其方法为抽象的方式,无需实现,留给其子类来实现,但此类必须也声明为抽象类。既是抽象类,当然也不能实例化。
E. abstract class是interface与Class的中介。
interface是完全抽象的,只能声明方法,而且只能声明pulic的方法,不能声明private及protected的方法,不能定义方法体,也不能声明实例变量。然而,interface却可以声明常量变量,并且在JDK中不难找出这种例子。但将常量变量放在interface中违背了其作为接口的作用而存在的宗旨,也混淆了interface与类的不同价值。如果的确需要,可以将其放在相应的abstract class或Class中。
abstract class在interface及Class中起到了承上启下的作用。一方面,abstract class是抽象的,可以声明抽象方法,以规范子类必须实现的功能;另一方面,它又可以定义缺省的方法体,供子类直接使用或覆盖。另外,它还可以定义自己的实例变量,以供子类通过继承来使用。3. interface的应用场合
A. 类与类之前需要特定的接口进行协调,而不在乎其如何实现。
B. 作为能够实现特定功能的标识存在,也可以是什么接口方法都没有的纯粹标识。
C. 需要将一组类视为单一的类,而调用者只通过接口来与这组类发生联系。
D. 需要实现特定的多项功能,而这些功能之间可能完全没有任何联系。4. abstract class的应用场合
一句话,在既需要统一的接口,又需要实例变量或缺省的方法的情况下,就可以使用它。最常见的有:
A. 定义了一组接口,但又不想强迫每个实现类都必须实现所有的接口。可以用abstract class定义一组方法体,甚至可以是空方法体,然后由子类选择自己所感兴趣的方法来覆盖。
B. 某些场合下,只靠纯粹的接口不能满足类与类之间的协调,还必需类中表示状态的变量来区别不同的关系。abstract的中介作用可以很好地满足这一点。
C. 规范了一组相互协调的方法,其中一些方法是共同的,与状态无关的,可以共享的,无需子类分别实现;而另一些方法却需要各个子类根据自己特定的状态来实现特定的功能。



 概念引入

●什么是接口?

接口是包含一组虚方法的抽象类型,其中每一种方法都有其名称、参数和返回值。接口方法不能包含任何实现,CLR允许接口可以包含事件、属性、索引 器、静态方法、静态字段、静态构造函数以及常数。但是注意:C#中不能包含任何静态成员。一个类可以实现多个接口,当一个类继承某个接口时,它不仅要实现 该接口定义的所有方法,还要实现该接口从其他接口中继承的所有方法。

定义方法为:

以下为引用的内容:
public interface System.IComparable
{
    int CompareTo(object o);

public class TestCls: IComparable
{
    public TestCls()
    {
    }


    private int _value;
    public int Value
    {
        get { return _value; }
        set { _value = value; }
    }


   public int CompareTo(object o)
    {

        //使用as模式进行转型判断
        TestCls aCls = o as TestCls;
        if (aCls != null)
        {

        //实现抽象方法
        return _value.CompareTo(aCls._value);
        }
    }
}

●什么是抽象类?

抽象类提供多个派生类共享基类的公共定义,它既可以提供抽象方法,也可以提供非抽象方法。抽象类不能实例化,必须通过继承由派生类实现其抽象方法, 因此对抽象类不能使用new关键字,也不能被密封。如果派生类没有实现所有的抽象方法,则该派生类也必须声明为抽象类。另外,实现抽象方法由 overriding方法来实现。

定义方法为:

以下为引用的内容:
/// <summary>
/// 定义抽象类
/// </summary>
abstract public class Animal
{
    //定义静态字段
    static protected int _id; 
    //定义属性
    public abstract static int Id
    {
        get;
        set;
    }


    //定义方法
    public abstract void Eat();

    //定义索引器
    public string this[int i]
    {
        get;
        set;
    } 
}

/// <summary>
/// 实现抽象类
/// </summary>
public class Dog: Animal
{
    public static override int Id
    {
        get {return _id;}
        set {_id = value;}
    }


    public override void Eat()
    {
        Console.Write("Dog Eats.")
    }
}

3. 相同点和不同点

3.1 相同点

●都不能被直接实例化,都可以通过继承实现其抽象方法。 
●都是面向抽象编程的技术基础,实现了诸多的设计模式。

3.2 不同点

●接口支持多继承;抽象类不能实现多继承。 
●接口只能定义抽象规则;抽象类既可以定义规则,还可能提供已实现的成员。 
●接口是一组行为规范;抽象类是一个不完全的类,着重族的概念。 
●接口可以用于支持回调;抽象类不能实现回调,因为继承不支持。 
●接口只包含方法、属性、索引器、事件的签名,但不能定义字段和包含实现的方法;抽象类可以定义字段、属性、包含有实现的方法。  
●接口可以作用于值类型和引用类型;抽象类只能作用于引用类型。例如,Struct就可以继承接口,而不能继承类。

通过相同与不同的比较,我们只能说接口和抽象类,各有所长,但无优略。在实际的编程实践中,我们要视具体情况来酌情量才,但是以下的经验和积累,或 许能给大家一些启示,除了我的一些积累之外,很多都来源于经典,我相信经得起考验。所以在规则与场合中,我们学习这些经典,最重要的是学以致用,当然我将 以一家之言博大家之笑,看官请继续。

3.3 规则与场合

1.请记住,面向对象思想的一个最重要的原则就是:面向接口编程。 
2.借助接口和抽象类,23个设计模式中的很多思想被巧妙的实现了,我认为其精髓简单说来就是:面向抽象编程。 
3.抽象类应主要用于关系密切的对象,而接口最适合为不相关的类提供通用功能。 
4.接口着重于CAN-DO关系类型,而抽象类则偏重于IS-A式的关系; 
5.接口多定义对象的行为;抽象类多定义对象的属性;  
6.接口定义可以使用public、protected、internal 和private修饰符,但是几乎所有的接口都定义为public,原因就不必多说了。 
7.“接口不变”,是应该考虑的重要因素。所以,在由接口增加扩展时,应该增加新的接口,而不能更改现有接口。 
8.尽量将接口设计成功能单一的功能块,以.NET Framework为例,IDisposable、IDisposable、IComparable、IEquatable、IEnumerable等都只包含一个公共方法。 
9.接口名称前面的大写字母“I”是一个约定,正如字段名以下划线开头一样,请坚持这些原则。 
10.在接口中,所有的方法都默认为public。  
11. 如果预计会出现版本问题,可以创建“抽象类”。例如,创建了狗(Dog)、鸡(Chicken)和鸭(Duck),那么应该考虑抽象出动物 (Animal)来应对以后可能出现风马牛的事情。而向接口中添加新成员则会强制要求修改所有派生类,并重新编译,所以版本式的问题最好以抽象类来实现。

12.从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实实现。 
13.对抽象类不能使用new关键字,也不能被密封,原因是抽象类不能被实例化。 
14.在抽象方法声明中不能使用 static 或 virtual 修饰符。

以上的规则,我就厚颜无耻的暂定为T14条吧,写的这么累,就当一时的奖赏吧。大家也可以互通有无,我将及时修订。

4. 经典示例

4.1 绝对经典

.NET Framework是学习的最好资源,有意识的研究FCL是每个.NET程序员的必修课,关于接口和抽象类在FCL中的使用,我有以下的建议:

1.FCL对集合类使用了基于接口的设计,所以请关注System.Collections中关于接口的设计实现; 
2.FCL对数据流相关类使用了基于抽象类的设计,所以请关注System.IO.Stream类的抽象类设计机制。

4.2 别样小菜

下面的实例,因为是我的理解,因此给经典打上“相对”的记号,至于什么时候晋升为“绝对”,就看我在.NET追求的路上,是否能够一如既往的如此执 着,因此我将把相对重构到绝对为止(呵呵)。 本示例没有阐述抽象类和接口在设计模式中的应用,因为那将是另一篇有讨论价值的文本,本文着眼与概念和原则的把握,但是真正的应用来自于具体的需求规范。

设计结构如图所示: 

 

1. 定义抽象类

以下为引用的内容:
public abstract class Animal
{
    protected string _name; 
    //声明抽象属性
    public abstract string Name
    {
        get;
    }

    //声明抽象方法
    public abstract void Show();

    //实现一般方法
    public void MakeVoice()
    {
        Console.WriteLine("All animals can make voice!");
    }


2. 定义接口

以下为引用的内容:
public interface IAction
{
    //定义公共方法标签
    void Move();
}

3. 实现抽象类和接口

以下为引用的内容:
public class Duck : Animal, IAction
{
    public Duck(string name)
    {
        _name = name;
    } 
    //重载抽象方法
    public override void Show()
    {
        Console.WriteLine(_name + " is showing for you.");
    }

    //重载抽象属性
    public override string Name
    {
        get { return _name;}
    }

    //实现接口方法
    public void Move()
    {
        Console.WriteLine("Duck also can swim.");
    }

}

public class Dog : Animal, IAction
{
    public Dog(string name)
    {
        _name = name;
    }

    public override void Show()
    {
        Console.WriteLine(_name + " is showing for you.");
    }

    public override string Name
    {
        get { return _name; }
    }

    public void Move()
    {
        Console.WriteLine(_name + " also can run.");
    }


}

4. 客户端实现

以下为引用的内容:

public class TestAnmial
{
    public static void Main(string [] args)
    {
        Animal duck = new Duck("Duck");
        duck.MakeVoice();
        duck.Show();

        Animal dog = new Dog("Dog");
        dog.MakeVoice();
        dog.Show();


        IAction dogAction = new Dog("A big dog");
        dogAction.Move();
    }


5. 他山之石

正所谓真理是大家看出来的,所以将园子里有创新性的观点潜列于此,一是感谢大家的共享,二是完善一家之言的不足,希望能够将领域形成知识,受用于我,受用于众。


●[url=]dunai[/url]认为:抽象类是提取具体类的公因式,而接口是为了将一些不相关的类“杂凑”成一个共同的群体。至于他们在各个语言中的句法,语言细节并不是我关心的重点。 
●桦山涧的收藏也很不错。 
●Artech认为:所代码共用和可扩展性考虑,尽量使用Abstract Class。当然接口在其他方面的优势,我认为也不可忽视。 
●shenfx认为:当在差异较大的对象间寻求功能上的共性时,使用接口;当在共性较多的对象间寻求功能上的差异时,使用抽象基类。

最后,MSDN的建议是:

●如果预计要创建组件的多个版本,则创建抽象类。抽象类提供简单易行的方法来控制组件版本。通过更新基类,所有继承类都随更改自动更新。另一方面,接口一旦创建就不能更改。如果需要接口的新版本,必须创建一个全新的接口。 
●如果创建的功能将在大范围的全异对象间使用,则使用接口。抽象类应主要用于关系密切的对象,而接口最适合为不相关的类提供通用功能。 
●如果要设计小而简练的功能块,则使用接口。如果要设计大的功能单元,则使用抽象类。 
●如果要在组件的所有实现间提供通用的已实现功能,则使用抽象类。抽象类允许部分实现类,而接口不包含任何成员的实现。

6. 结论

接口和抽象类,是论坛上、课堂间讨论最多的话题之一,之所以将这个老话题拿出来再议,是因为从我的体会来说,深刻的理解这两个面向对象的基本内容, 对于盘活面向对象的抽象化编程思想至关重要。本文基本概况了接口和抽象类的概念、异同和使用规则,从学习的观点来看,我认为这些总结已经足以表达其核心。 但是,对于面向对象和软件设计的深入理解,还是建立在不断实践的基础上,Scott说自己每天坚持一个小时用来写Demo,那么我们是不是更应该勤于键盘 呢。对于接口和抽象类,请多用而知其然,多想而知其奥吧。





SQL命令语句小技巧

1.[ ]的使用

  当我们所要查的表是系统关键字或者表名中含有空格时,需要用[]括起来,例如新建了两个表,分别为user,user info,那么select * from user和select * from user info就要报错,需要写成:select * from [user] 和 select * from [user info],不过千万不要因为有[]的帮助,就随意起名了,那是自找麻烦,不过我确实看到有人把用户表起名为user的。

2.NULLIF函数

  NULLIF(Expression1,Expression2):给定两个参数Expression1和Expression2,如果两个参数相等,则返回NULL;否则就返回第一个参数。

  等价于:Case WHEN Expression1=Expression2 Then NULL ELSE Expression1。

  例如Select NULLIF(1,1)返回NULL,Select NULLIF(1,2)返回1。

  有一个实际的应用,例如防止除0操作的放生,可以使用a/NULLIF(b,0),这样就不怕b是0了,当然除0操作也可以通过别的方式判断。

3.NULL

  NULL是个神奇的东西,表示空值,未知值,任何数与它加减乘除都返回NULL。

4.ISNULL函数

  ISNULL(Expression1,Expression2):给定两个参数Expression1和Expression2,如果Expression1是NULL,那么返回Expression2,否则返回Expression1。

  等价于:Case WHEN Expression1 is NULL Then Expression2 ELSE Expression1。

  例如Select ISNULL(NULL,1)返回1,Select ISNULL(1,2)返回1。

  有一个实际的应用,可以对空值进行默认值替代,例如SELECT ISNULL(email,'没有填写email') from table1,所有email为null的,用'没有填写email'来替代。

 5.COALESCE函数

  COALESCE(Expression1,Expression2,Expression3,......):接受一系列的表达式或列,返回第一个非空的值。

      例如SELECT COALESCE(NULL,NULL,4,NULL,NULL,5),那么返回4,如果里面的参数都为NULL,那么会报错。

6.WITH TIES

  与top()和order by 一起用,可以返回多于top的行。防止丢失想要的信息。

如果按照order by 参数排序TOP n(PERCENT)返回了前面n(pencent)个记录,

但是n+1…n+k条记录和排序后的第n条记录的参数值(order by 后面的参数)相同,

则n+1、…、n+k也返回。n+1、…、n+k就是额外的返回值

  例如:有个表table1

(1)select * from table1 order by name desc :结果如下:

(2)select top(3) * from table1 order by name desc:结果如下:(只有三条)

(3)select top(3) with ties * from table1 order by name desc:结果如下:

7.ORDER BY NEWID():返回随机排序结果。

8.BETWEEN a AND b:返回大于等于a,小于等于b的结果。如果a>b,那么返回NULL。

9.不要在where条件中使用函数,会强制每一行都计算该函数,无法使用索引查找。

  例如:select * from table1 where id+3>5和select * from table1 where id>5-3,后者效率比前者高。

10.许多以_desc结尾的列,是为了更友好的表示一个列的含义。

  例如:SELECT * FROM sys.databases

11.推荐一个小插件,SQL Prompt,配合Microsoft SQL Server Management Studio,使用起来非常方便,同时再加上以下几个快捷键:

  (1)ctrl+5或F5,运行代码,如果想运行特定的语句,那么只是选中该语句,然后F5或ctrl+E即可。

  (2)ctrl+L:显示执行计划。

  (3)ctrl+R:显示隐藏下面的结果窗口,增大自己书写sql的空间。

  (4)ctrl+K,然后按Y,格式化SQL代码。

 

JQUERY判断CHECKBOX是否选中三种方法

方法一:
if ($("#checkbox-id")get(0).checked) {
    // do something
}

方法二:
if($('#checkbox-id').is(':checked')) {
    // do something
}

方法三:
if ($('#checkbox-id').attr('checked')) {
    // do something
}

 

JS中!=、==、!==、===的用法和区别

1、对于string,number等基础类型,==和===是有区别的

1)不同类型间比较,==之比较“转化成同一类型后的值”看“值”是否相等,===如果类型不同,其结果就是不等
2)同类型比较,直接进行“值”比较,两者结果一样
 
2、对于Array,Object等高级类型,==和===是没有区别的
进行“指针地址”比较
 
3、基础类型与高级类型,==和===是有区别的
1)对于==,将高级转化为基础类型,进行“值”比较
2)因为类型不同,===结果为false
 
复制代码
复制代码
var num = 1;
 
var str = '1';
 
var test = 1;
 
test == num   //true 相同类型 相同值
 
test === num  //true 相同类型 相同值
 
test !== num  //false test与num类型相同,其值也相同, 非运算肯定是false
 
 
num == str   //true  把str转换为数字,检查其是否相等。
 
num != str   //false  == 的 非运算
 
num === str  //false  类型不同,直接返回false
 
num !== str  //true   num 与 str类型不同 意味着其两者不等 非运算自然是true啦
复制代码
复制代码

== 和 != 比较若类型不同,先偿试转换类型,再作值比较,最后返回值比较结果 。

而 
=== 和 !== 只有在相同类型下,才会比较其值。
 
 
 

在对象比较中,对象相等和对象一致分别指的是什么?

对象数据存内存堆里,对象一致即内存堆相同,对象相等为哈希表中键同值可能不同

 

简单的讲:相等性(quality)就是两个对象,它们的值相等。同一性(identity)就是指引用的是否为同一个对象。 下面是我的读书笔记: C# 中有两种不同的相等:引用相等和值相等。值相等是大家普遍理解的意义上的相等:它意味着两个对象包含相同的值。例如,两个值为 2 的整数具有值相等性。

引用相等意味着要比较的不是两个对象,而是两个对象引用,这两个对象引用所引用的是同一个对象。我们这里把值相等叫做对象的“相等性(equality)”,把引用相等叫做对象的同一性(identity)。

我们都知道在System.Object类型中提供了一个名为Equals的虚方法,它的作用是在两个对象相等的情况下返回true,不相等时返回false。等等,这里的说的“相等”是哪个?是“相等性(equality)”还是“同一性(identity)”。

好吧,来看一下代码吧,System的Object方法是像下面这样实现的:

public class Object { public virtual Boolean Equals(Object obj)

{

      // 如果两个引用指向的是同一个对象,那么它们肯定相等

     if (this == obj) return true;

    // 假定对象不相等

    return false;

}

}

表明上看它好像是实现的很合理:

假如this和Obj引用同一对象,自然就是true了,因为Equals知道一个对象肯定等于它自身。

然而,如果this和Obj引用不同的对象哪?,Equals就不能肯定对象是否包含相同的值,

所以总结一句话就是:Object的Equals方法实现的只是“同一性(identity)”,而不是“相等性(equality)”。

多么的令人遗憾啊~!Object的Equals的默认实现并不合理,既然不合理我们就来重写它吧,先来看看如何在内部正确实现一个Equals方法(我把它概括为四个字——空、型、值、基):

如果obj参数为null,就返回false;

如果this和obj参数引用不同的类型对象,返回false;

针对类型定义的每个实例字段,将this对象的值和obj对象的值进行对比,任何字段不相等,就返回false;

调用基类的Equals方法,以便比较它定义的任何字段。如果基类的Equals方法返回false,就返回false;否则返回true;

再来看一下Object的Equals方法的实现代码:

    public class Object

   {

        public virtual Boolean Equals(Object obj)

        {

             if (obj == null)

             return false;

            if (this.GetType() != obj.GetType())

            return false;

           // 如果对象属于相同的类型,那么在它们的多有字段都匹配的前提下返回true

          // 由于System.Object没有定义任何字段,所以字段是匹配的

          return true;

       }

}  

其实,这里要说一下,Microsoft并没有这样去实现他的代码,而是要比这个复杂的多的多。

 那么Equals方法可以在子类中重写,那么就不可以用Equals方法来测试同一性(identity)了。怎么办啊?

Microsoft在Object中提供了一个静态方法ReferenceEquals,其原型如下:

public class Object

{

  public static Boolean ReferenceEquals(Object objA, object objB)

  {

  return (objA == objB);

  }

}

注意了啊,如果想要检查同一性(identity),那么务必调用ReferenceEquals,而不应该使用C#的==操作符(除非事先把它们转化为Object类型),

原因是其中某个操作数的类型可能重载了==操作符,为其赋予了其它语义。

另外,System.ValueType重写了Object的Equals方法。并进行了正确的实现来执行相等性(equality)检查,而不是同一性(identity)检查。

在内部,ValueType的Equals方法是像这样实现的:

  如果obj参数为null,返回false; 如果this和obj引用的不同类型的对象,返回false;

  针对类型定义的每个实例字段,都将this对象的值和obj对象中的值进行比较。

  如果有字段不相等,就返回false; 返回true;

  ValueType的Equals的方法不会调用Object的Equals方法。

  顺便说一下,ValueType的Equals方法是通过反射技术来完成的。由于CLR反射机制较慢,所以在定义自己的值类型时,应该重写Equals方法,并提供自己的实现,以便提高性能。当然在自己的实现中不要调用base.Equals。

   要重写Equals,必须遵循一下几点特性: x.Equals(x) 返回 true。 (自反性) x.Equals(y) 与 y.Equals(x) 返回相同的值。 (对称性) 如果 (x.Equals(y) && y.Equals(z)) 返回 true,则 x.Equals(z) 返回 true。 (传递性) 只要不修改 x 和 y 所引用的对象,x.Equals(y) 的后续调用就返回相同的值。 (一致性) x.Equals(null) 返回 false。

 

  对象们都住在不同的房间里,每个房间只能住一个对象.对象们都被锁在房间里,永远没有办法搬家(至少从我们讨论的角度来说,这个说法是正确的).所以如果你知道了一个对象的

房间号,就能找到对应的对象. 现在假如我们有两张名片,上面如果写着相同的房间号,我们就可以断定,这两张名片是同一个对象分发出来的,这就是同一性,也就是你所说的一致. 假如1

号房里住着一个值为1的整数对象, 2号房里住着另一个值为2的整数对象,3号房里住着另另一个值为1的整数对象.我们又有它们各自的一张名片, 那么,第一个名片和第三个对应的对

象的值是相等的,但是它们不是同一个对象,用你的词来说,也就是说它们"相等",但不"一致". 如果上面说得太清楚了,那么这里让你再困扰一会吧,哈哈: 这里的名片就是引用(i, count

之类的变量/字段等的名称); 房间所在的大楼就是内存,房间号就是内存地址. 对象就是内存里保存的数据.

 

  对象们都住在不同的房间里,每个房间只能住一个对象.对象们都被锁在房间里,永远没有办法搬家(至少从我们讨论的角度来说,这个说法是正确的).所以如果你知道了一个对象的房间号,就能找到对应的对象.

现在假如我们有两张名片,上面如果写着相同的房间号,我们就可以断定,这两张名片是同一个对象分发出来的,这就是同一性,也就是你所说的一致.

假如1号房里住着一个值为1的整数对象, 2号房里住着另一个值为2的整数对象,3号房里住着另另一个值为1的整数对象.我们又有它们各自的一张名片, 那么,第一个名片和第三个对应的对象的值是相等的,但是它们不是同一个对象,用你的词来说,也就是说它们相等,但不一致.

如果上面说得太清楚了,那么这里让你再困扰一会吧,哈哈:

这里的名片就是引用(i, count之类的变量/字段等的名称);

房间所在的大楼就是内存,房间号就是内存地址.对象就是内存里保存的数据.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值