-孤獨的路上有夢想做伴,乘風破浪-c#
(1)C#各頁面之間能夠進行數據的交換和傳遞,頁面之間可根據獲取的數據,進行各自的操做(跳轉、計算等操做)。爲了實現多種方式的數據傳遞,C#提供一下幾種方式:微信
1.Query.String方式cookie
2.Server.Transfer方式session
3.Cookie方式ide
4.Session方式函數
5.Application方式this
(2)實現方式spa
新建TestTransfer項目,添加TransferOne.aspx頁面和TransferTwo.aspx頁面。在TransferOne.aspx中,添加兩個文本框和一個按鈕,用來實現跳轉。在btnLogin_Click中添加實現的邏輯代碼:3d
在TransferTwo.aspx中添加:指針
在Page_Load中添加邏輯實現代碼,
以上就是c#頁面之間傳值的幾種方式,其中Query.String方式在URl地址欄中會顯示傳遞的的參數值信息。
注意:Session與Cookie的區別
因爲Http協議是基於Tcp/Ip的,當用戶從客戶端發送請求到服務端,服務端響應請求,並返回數據給客戶端,這個過程是無狀態的,爲了保存客戶端的某些狀態,所以用到了Session和Cookie機制。
(1)session存儲在服務端,cookie是存儲在客戶端,而且存儲的大小有限制。
(2)session實現的本質是依靠cookie來作的,通常把具備敏感信息的內容用session存儲在服務端,例如密碼等。首先在服務端生成session之後,返回SessionID給客戶端,客戶端Cookie保存SessionID的值,
下次請求的時候帶着SessionID去獲取對應的Session的值。
(3)Cookie存在有效期,能夠設置cookie的有效期。
聲明Cookie的方式:
var cookie = Request.Cookies["user"] ?? new HttpCookie("user");
cookie.Values.Set("username", this.TextBox1.Text);
cookie.Values.Set("password", this.TextBox2.Text);
Response.SetCookie(cookie);
Response.Cookies.Add(cookie);
聲明Session方式:
Session["username"] = this.TextBox1.Text;
Session["password"] = this.TextBox2.Text;
(1)定義:
重載:同一個做用域內發生(好比一個類裏面),定義一系列同名方法,可是方法的參數列表不一樣。這樣才能經過傳遞不一樣的參數來決定到底調用哪個。返回類型能夠相同也能夠不一樣。
重寫:繼承時發生,在子類中從新定義父類中的方法,子類中的方法和父類的方法是同樣的。例如:基類方法聲明爲virtual(虛方法),派生類中使用override申明此方法的重寫.
隱藏:基類方法不作申明(默認爲非虛方法),在派生類中使用new聲明此方法的隱藏。子類覆蓋基類的方法,其返回值類型必須相同。
(2)實現Demo
static void Main(string[] args)
{
var coderOne=new DoWork();
coderOne.DoCoding("liupeng");
coderOne.DoCoding("liupeng", 24);
var coderTwo=new SubDoWork();
coderTwo.Say();
//隱藏基類的方法
coderTwo.EnjoyLife();
//經過實例化的對象,決定調用基類仍是子類中的方法
coderOne.EnjoyLife();
Console.ReadKey();
}
public class DoWork
{
public virtual void Say()
{
Console.WriteLine("I am in Base Calss,Hello Everyone!");
}
public void EnjoyLife()
{
Console.WriteLine("I am a Coder, but I like my life, Coding is my life,also is my girl! Haha!");
}
public void DoCoding(string name)
{
Console.WriteLine(string.Format("My name is {0},I love coding!", name));
}
public void DoCoding(string name, int age)
{
Console.WriteLine(string.Format("My name is {0},age is {1},I always love coding!", name, age));
}
}
public class SubDoWork : DoWork
{
public override void Say()
{
Console.WriteLine("I am in SubClass,Hello Everybody!");
}
new public void EnjoyLife()
{
Console.WriteLine("I am a new bird ,i must work hard to achieve my dream!");
}
}
1.關於類和結構體的區別:
(1)類中傳遞的內容是存儲在託管堆中,而結構體中傳遞的內容是存儲在棧中。
(2)類中傳遞的對象修改的時候,將修改源對象;而結構體中的對象修改時,源對象不會改變,保持原來的狀態。
(3)類中的構造函數,能夠是默認無參的構造函數,也能夠是有參數的構造函數;但結構中的構造函數必須爲有參數的構造函數,不能爲默認的構造函數。
2.實現Demo
static void Main(string[] args)
{
Console.WriteLine("-----------初始化以前的字段的值--------------");
var studentOne = new StuName("zhangyonghe", 26);
var studentTwo = new StructStuName("liupeng", 25);
studentOne.SayHello();
studentTwo.SayHello();
Console.WriteLine("--------------修改對象的傳遞時的值------------");
var studentOneNew = studentOne;
studentOne.Age = 30;
studentOne.SayHello();
var studentTwoNew = studentTwo;
studentTwoNew.Age = 35;
studentTwo.SayHello();
Console.ReadKey();
}
public class StuName
{
public string Name { get; set; }
public int Age { get; set; }
public StuName(string name, int age)
{
this.Name = name;
this.Age = age;
}
public void SayHello()
{
Console.WriteLine(string.Format("Class類結構的姓名爲:{0},年齡爲:{1}", Name, Age));
}
}
public struct StructStuName
{
public string Name;
public int Age;
//結構體的構造函數必須滴啊有參數
public StructStuName(string name, int age)
{
Name = name;
Age = age;
}
public void SayHello()
{
Console.WriteLine(string.Format("Struct結構的姓名是:{0},年齡是:{1}", Name, Age));
}
}
運行結果爲:
(1)定義:將值類型轉化爲引用類型爲裝箱;將引用類型轉化爲值類型稱之爲拆箱。
(2)熟悉一段代碼:
public void Method1(){
// Line 1
int i=4;
// Line 2
int y=2;
//Line 3
class1 cls1 = new class1();
}
此時,程序是這樣解析的:
(1)先在棧上根據值類型的大小分配相應的內存空間,將值類型變量的Value存在棧空間上。
(2)當執行到實例化一個對象cls1時,編譯器在站上建立了一個指針,真實的對象存儲在另外一種叫「堆」的內存中。
"堆"並不跟蹤運行內存,它更像一堆隨時能夠訪問的對象。堆用於動態分配內存。這裏須要着重說明的是引用指針是分配在棧上。
聲明Class1 cls1時並不會給Class1的實例分配內存,而是分配一個棧變量cls1(並設置爲null),而後把它指向「堆」。
當咱們在初始化一個對象,並將cls1賦給cls2的時候,實際上是在stack上面建立一個棧變量,並把變量的指針指向cls1對象的引用。
而後咱們看看拆箱的過程發生了什麼?
int i=4;
object o=i;
int j=(int)o;
拆箱的過程:
(1). 檢查實例:首先檢查變量的值是否爲null,若是是則拋出NullReferenceException異常;再檢查變量的引用指向的對象是否是給定值類型的已裝箱對象,若是不是,則拋出InvalidCastException異常。
(2). 返回地址:返回已裝箱實例中屬於原值類型字段的地址,而兩個額外成員(類型對象指針和同步塊索引)則不會返回。
到此,拆箱過程已經結束,可是伴隨着拆箱,「每每」(《CLR via C#》中的描述,用的是」每每「,而並無說必定)會緊接着發生一次字段的複製操做。
實際上就是講已裝箱對象中的實例字段拷貝到內存棧上。
一個本身維護的微信公衆號,目前文章很少,但願接下來的日子,會一直更新下去,寫本身的生活,分享技術,但願熱愛生活的技術宅,一塊兒交流!