【问题标题】:C# WPF application: What is "this"?C# WPF 应用程序:什么是“this”?
【发布时间】:2013-07-30 12:16:10
【问题描述】:

我一直在用 C# 中的 WPF 应用程序玩很多东西,有很多东西对我来说不是很清楚,我一直在尝试查找它并尝试解决它,但没有取得多大成功因为英语是我的第二语言,但我对术语和编程仍然不太擅长......

1:主类中的“this”是什么?当我在 XAML 中创建新的 WPF 应用程序时,我得到了窗口和网格。但是,我非常不喜欢 XAML,喜欢为我需要的所有元素和对象编写代码,所以我删除第一个网格,创建一个类,定义我的网格并添加它,我必须编写类似

的东西
   this.AddChild(myGrid);

这很好,但是如果我想在其他课程中使用我的主课程中的“this”,这对我来说有点复杂。那么,哪个 UIElement 或 Object 是“this”?我如何定义它以便可以在方法中使用它? “this”,我想是指开始创建的Window,但是那个Window是什么UIElement或Object?

2:Extended classes??我最近看了很多java教程,只是为了学习更多关于编程的知识。在那里,要使用其他类的对象,您可以简单地编写:

   public class class1 extends class2{}

一切都很完美,我发现我可以在 C# WPF 中模仿同样的东西,除非它是主类,因为主类扩展了 :Window,我猜因为它被定义为部分类......有没有办法“扩展”多个课程或绕过这个?

任何有关清除此问题的帮助都会很棒:)

【问题讨论】:

  • 您必须阅读一本关于面向对象编程的书,而不是一本关于 C# 的书,最后一本关于 WPF 的书。不要尝试在没有这个最小背景的情况下编写 WPF 程序。
  • this 是当前班级
  • 我同意买一本书。但我绝对不同意他/她不应该用这些知识编写程序。如果您现在遇到问题,您一定要查找并边走边学。接下来你应该从书中学习..
  • 这代表当前类Object
  • Clemens 我很赞同你的建议,但我也喜欢边学习边编写代码,只是为了尝试一些东西,就像 Bart 建议的那样。 Coral Doe 谢谢你,这是很有价值的信息,我很感激。 @Samuel 我喜欢在启动应用程序本身之前添加菜单栏,只是为了选择一些选项,加载一些输入或创建一个新的文件/工作表/文档以开始工作,同时编码我的自定义按钮。在这些情况下使用 XAML 只会使我的工作复杂化,我个人不喜欢它:P

标签: c# wpf this extend


【解决方案1】:

扩展一个类在面向对象编程中基本上被称为继承。有几种类型的继承,例如单、多、多级、分层、混合。但是 C# 和 Java 不支持从多个类继承,因为多重继承会产生很多歧义。

替代多重继承的一个特性是使用接口。我们使用关键字“实现”来“实现接口”,而不是“从类扩展”。接口只是一个骨架类,您在其中声明方法签名,接口将在您“实现接口”的类中实现。重要的一点是你可以实现多个接口

要获得有关继承和接口的概述,以下链接会有所帮助:

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

【讨论】:

  • 感谢您的精彩描述和链接,我正在查找:)
【解决方案2】:

关于“this”及其身份的部分,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;
    }

...这个 sn-p 中的所有分配都是合法的。此外,还有更多奇特的任务,例如

var x = this as IInputElement;

这里的关键是检查框架和每个班级可用的各种作业。正如其他人所指出的,离线阅读对于快速学习曲线至关重要。

“this”作为面向对象上下文中的关键字的词源可以追溯到 1970 年代后期,当时它首次出现在 C++ 的早期规范中。

最后,出于多种原因,Xaml 是 WPF 最吸引人的特性之一,如果 Xaml 与您的方法不兼容,您最好在 WinForms 或 Swing 或类似的紧密绑定框架中使用。

【讨论】:

  • 感谢您提供如此出色的答案,您只回答了我的前半部分答案,所以我不能接受您的评论以寻求解决方案,但很好!它帮助了很多:)
  • Stack Overflow 的做法是针对每个主题提出一个问题,我遵守并尊重它。抱歉,这对你没有用。祝你好运。
  • 下次我会记住这一点,我没有意识到这一点。谢谢你的一切:)
  • @AntonioTehSumtin,我会留意您未来的任何问题,并尝试发布相关答案。
  • 你真是太好了,但是……我觉得我从你那里得到的太多了,我怕你会徒劳地等待……我不经常问问题,我试着自己找东西,所以我不会经常打扰这里的人:D
【解决方案3】:

简单地说this是你所在的班级。

举个例子

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

【讨论】:

    【解决方案4】:

    你应该学习 C# 中的面向对象编程

    1. this 表示类的当前实例。所以在每个类中this 指的是不同的对象。 this 通常可以省略,只使用AddChild(myGrid)
    2. extends(或 C# 中的 :)意味着第一个类 (class1) 继承自第二个类 (class2),因此可以访问在 class2 中定义且未标记为 @987654330 的方法和变量@。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-11
      相关资源
      最近更新 更多