2013-07-30 59 views
0

我一直在使用C#編寫WPF應用程序,並且有很多事情對我來說並不是很清楚,我一直在試圖查找它並使用它來解決它,但沒有取得太大的成功,英語是我的第二個語言,我用術語和編程還是不太好......C#WPF應用程序:什麼是「this」?

1:什麼是主類中的「this」?當我在XAML中創建新的WPF應用程序時,我得到了窗口和一個網格。但是,我很不喜歡XAML和喜歡寫代碼的所有元素,而我需要讓我刪除第一個網格對象,使類,定義我的網格,並添加它,我不得不寫類似

this.AddChild(myGrid); 

這很好,但是如果我想在其他課程中使用我的主課程中的「this」,它會變得有點複雜。那麼,哪個UIElement或Object就是「這個」?我如何定義它,以便可以在方法中使用它? 「這個」,我想是指在開始時創建的窗口,但是UIElement或Object是那個窗口?

2:擴展類最近我一直在看很多java教程,只是爲了學習更多關於編程的知識。還有,使用來自其他類的對象,你可以簡單的寫:

public class class1 extends class2{} 

,一切都是完美的,我發現,我可以模仿C#WPF同樣的事情,除非它的主類,因爲主要的類擴展:窗口,我猜想,因爲它被定義爲部分類...有沒有辦法「擴展」多個類或繞過這個?

上清除這件事的任何幫助將是巨大的:)

+6

你將不得不讀一本書在面向對象編程,而不是C#上的編程,最後是WPF上的編程。不要嘗試寫一個沒有這個最小背景的WPF程序。 – Clemens

+0

'this' is the current class – Fendy

+3

我同意拿到一本書。但我最明確地不同意他/她不應該用這種知識寫一個程序。如果你現在面臨一個問題,你一定會查找並學習。旁邊,你應該從書中學到.. –

回答

1

有關「本」,其身份的一部分,Window坐落在分層次的類和可以承擔任何祖先的身份。例如...

public MainWindow() 
    { 
     InitializeComponent(); 
     var contentControl = this as ContentControl; 
     var control = this as Control; 
     var frameworkElement = this as FrameworkElement; 
     var uiElement = this as UIElement; 
     var dependencyObject = this as DependencyObject; 
     var dispatcher = this as DispatcherObject; 
    } 

...這段代碼中的所有賦值都是合法的。此外,還有更多異國情調的作業,如

var x = this as IInputElement; 

這裏的關鍵是檢查框架和每個類可用的各種作業。正如其他人所指出的,離線閱讀對於快速學習曲線是必不可少的。

作爲面向對象的上下文中的一個關鍵字,'this'的詞源可以追溯到20世紀70年代末,當它首次出現在早期的C++規範中時。最後,由於許多原因,Xaml是WPF最具吸引力的特性之一,並且如果Xaml與您的方法不兼容,那麼在WinForms或Swing或類似的緊密綁定框架中,您可能會變得更好。

+0

謝謝你這麼好的回答,你只回答了我的答案的前半部分,所以我不能接受你的評論解決方案,雖然很棒!它幫助了很多:) –

+0

Stack Overflow的做法是爲每個主題提出一個單一的問題,我觀察並尊重它。對不起,沒有爲你工作。祝你的答案得到答案。 –

+0

下次我會記住這一點,但我並沒有意識到這一點。謝謝你的一切:) –

1

你應該學會在C#面向對象編程

  1. this意味着類的當前實例。所以在每個類this指的是一個不同的對象。通常可以省略this,只能使用AddChild(myGrid)
  2. extends(或者在C#:)指的是,第一類(class1)從第二(class2)繼承因此具有訪問在class2中定義的未標記private方法和變量。
0

簡單地說this是你在課堂上。

舉一個例子

class dim 
{ 
    int sum = 0; 
    public void num(int sum){ 
     this.sum = sum; //Places the sum from num to the sum in dim 
    } 
} 
+0

感謝您的評論:) –

1

擴展類基本上被稱爲面向對象編程中的繼承。有幾種類型的繼承,如單一,多重,多級,分層,混合。但是C#和Java不支持來自多個類的繼承,因爲多重繼承會產生很多模糊性。

替換多重繼承的功能是使用接口。我們使用關鍵字'implements'來實現一個接口,而不是'從類中擴展'。接口只是一個框架類,在這個類中聲明瞭方法簽名,接口將在'實現接口'的類中實現。最重要的一點是可以實現多個接口

要獲取有關繼承和接口的概述,下面的鏈接將是有益的:

http://msdn.microsoft.com/en-us/library/ms228387(v=vs.80).aspx

+0

謝謝你一個很好的描述和鏈接,我正在查找:) –

相關問題