乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 61|回复: 4

在对象初始值设定项中调用函数?

[复制链接]

1

主题

7

帖子

3

银币

初来乍到

Rank: 1

铜币
11
发表于 2016-8-17 10:13:23 | 显示全部楼层 |阅读模式
我一直在研究斯科特·麦克法兰的一些代码,想知道是否有人能帮我找到C#留档,它讨论了C#编译器如何知道斯科特在下面的代码中调用“Paletteset.Add(字符串名称,控制控制)”函数。我在网上找到的所有示例代码都不承认在对象初始化器中调用函数是可能的,public ulualSynaliz()。
{。
如果(_paletteSet==null)。
{。
var ctrl=new UserControl1();。

_paletteSet=新的PaletteSet("WPF演示")。
{。
{。
“圆半径”,。
新的ElementHost{Autosize=true, Dock=DockStyle.Fill, child=ctrl}。
}。
};。

ctrl.HostApplication=新的主机应用程序();。
}。
_paletteSet.Visible=true;。
}ILSpy显示之前的代码转换为这个://DV2177.WPF.AcadHost.MainApp。
公共空初始化()。
{。
如果(MainApp._paletteSet==null)。
{。
UserControl1 ctrl=new UserControl1();。
PaletteSet paletteSet=new PaletteSet(“WPF演示”);。
paletteSet.Add("圆形半径",新的ElementHost。
{。
自动大小=true,。
码头DockStyle.Fill。
孩子=ctrl。
});。
MainApp._paletteSet=paletteSet;。
ctrl.HostApplication=新的主机应用程序();。
}。
_paletteSet.set_Visible。
}。

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2016-8-17 21:49:36 | 显示全部楼层

您能举一个此类文档的示例吗?
初始值设定项是调用许多函数/方法的地方。例如,看一下 winform 设计器代码文件,这是添加所有控件和通过方法分配委托的地方。
在分部类 Initialize() 代码中,您可以调用许多函数来设置成员变量和任何其他设置计算。
或者,也许我没有正确理解你的问题??
干杯。
回复

使用道具 举报

1

主题

7

帖子

3

银币

初来乍到

Rank: 1

铜币
11
发表于 2016-8-19 14:16:46 | 显示全部楼层
嗨,MickD,我没有完全描述我在说什么,加上我有一个名为“初始化”的函数,所以我很抱歉混淆了。 以下是我正在谈论的C#功能的链接:如何:使用对象初始值设定项初始化对象(C#编程指南)https://msdn.microsoft.com/en-us/library/bb397680.aspx在他们的一些示例中,他们使用编译器创建的默认构造函数来创建新的学生和“对象初始值设定项”来建立该学生的属性。 new StudentName {FirstName=“Craig”, LastName=“Playstead”, ID=116}每个属性都被命名,并且在此网页中没有提到调用在“对象初始值设定项”中命名或未命名的函数。 我试图引起注意的上一篇文章中的这一部分是位于QueleSet(字符串名称)构造函数的“对象初始值设定项”部分中的部分,{。
“圆半径”,。
new ElementHost {AutoSize = true, Dock = DockStyle.Fill, Child = ctrl}。
}预期的函数未命名,但从 ILSPY 中可以看出编译器正在使用变量类型来选择此函数:public Palette Add(字符串名称,控件控件);。
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2016-8-19 17:52:11 | 显示全部楼层

嗨,DavidS,感谢您的澄清,您是正确的,对象初始值设定项使用的是变量类型。包装名称和元素宿主的额外双括号“{}”是“集合初始值设定项”,因为调色板集是一个集合,它知道如何处理它们,您也可以在构造函数中使用多个初始值设定值。
干杯,
米克
回复

使用道具 举报

4

主题

219

帖子

4

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
238
发表于 2016-8-19 18:34:38 | 显示全部楼层
在此代码中: new StudentName {FirstName=“Craig”, LastName=“Playstead”, ID=116}每个属性都由其名称访问/标识,而在此代码中:{。
“圆半径”,。
new ElementHost {AutoSize = true, Dock = DockStyle.Fill, Child = ctrl}。
}方法通过其签名进行访问/标识,只要它是唯一的。如果一个类有多个具有相同签名的方法,则必须按名称访问/标识它们。由于 PaletteSet 只有一个接受 2 个参数的方法 - 第一个是字符串,其次是 Winform 控件,因此可以省略其名称。 我相信,这是在 .NET 3.5 发布时 C# 3.0 中引入的 C# 语言功能。我不确定如何在 VB.NET(可能是像“与...以“?任何类的属性,或方法,实际上是另一个类(意思是,一切都是一个对象/类),因此代码:var class1Instnace=new Class1 { Property1=expression1, Property2=expression2, Method1(arg1, arg2), Method2(arg1,arg2), {arg3, arg4, arg3},...};在本例中,类定义了 3 个方法:2 个方法接受相同类型的 2 个参数,而第 3 个方法接受 3 个参数。因此,在“对象初始值设定项”中,如果代码需要调用所有3个方法,则前2个必须按名称引用,而第三个由于其唯一签名而不需要按名称调用。当然,在“对象初始值设定项”中,所需的流程逻辑决定要初始化哪个属性,需要调用哪个方法。。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-4 16:44 , Processed in 0.152708 second(s), 62 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表