Many times we try to make copy of session object, but in case when we
are modifying copied object we might noticed that session object gets
updated automatically, the reason is both copied object and session
object are pointing to same location, even if you tried to use "new"
operator while creating object.
Scenario
Let say you have Member Class as mentioned under
public class Member{
public string FirstName { get; set; }
public string LastName { get; set; }
}
Problem:
Member objMember = new Member();
objMember.FirstName = "Sachin";
objMember.LastName = "Tendulkar";
Then try to save object in Session
Session["MemberObj"] = objMember;
This method will work good till we are just accessing object from session, but in case if we try to update object created from session it will update value of session also.
That is,
Member newMember = new Member(); //Even though object is created using "new" keyword.
newMember = (Member) Session["MemberObj"];
newMember.FirstName = "Kapil"; //This will update session FirstName also.
Solution:
To make copies of session you need to create a clone method in class.
In above class create a method clone, to support copy of session.
public class Member{
public string FirstName { get; set; }
public string LastName { get; set; }
public Member clone()
{
Member cloneMember = new Member();
cloneMember.FirstName = this.FirstName;
cloneMember.LastName = this.LastName;
}
}
Now, while accessing session object, you can call clone method to make copy of session.
Member newMember = new Member();
newMember = ((Member) Session["MemberObj"]).clone();
now if you try to modify object copied from session, will not update session object.
newMember.FirstName = "Kapil"; //Will not update session FirstName
Scenario
Let say you have Member Class as mentioned under
public class Member{
public string FirstName { get; set; }
public string LastName { get; set; }
}
Problem:
Member objMember = new Member();
objMember.FirstName = "Sachin";
objMember.LastName = "Tendulkar";
Then try to save object in Session
Session["MemberObj"] = objMember;
This method will work good till we are just accessing object from session, but in case if we try to update object created from session it will update value of session also.
That is,
Member newMember = new Member(); //Even though object is created using "new" keyword.
newMember = (Member) Session["MemberObj"];
newMember.FirstName = "Kapil"; //This will update session FirstName also.
Solution:
To make copies of session you need to create a clone method in class.
In above class create a method clone, to support copy of session.
public class Member{
public string FirstName { get; set; }
public string LastName { get; set; }
public Member clone()
{
Member cloneMember = new Member();
cloneMember.FirstName = this.FirstName;
cloneMember.LastName = this.LastName;
}
}
Now, while accessing session object, you can call clone method to make copy of session.
Member newMember = new Member();
newMember = ((Member) Session["MemberObj"]).clone();
now if you try to modify object copied from session, will not update session object.
newMember.FirstName = "Kapil"; //Will not update session FirstName

Choosing the syntax. Whichever array type you choose, don't select it because
of the syntax. It is important to know that the pairs of brackets indicate "jagged,"
and the comma in the brackets means "2D".

Overview. The instances with identifiers func1 through
func8 all denote anonymous function instances in the C# language. The Func<TResult>
type indicates an anonymous function with one result value and no parameter. The
Func<T, TResult> type indicates a function with one parameter and one result
value. The Action type indicates a function instance that does not receive a parameter
and does not return a value.