采用动态C#编程技术

时间:2020-02-23 14:29:51  来源:igfitidea点击:

定义新变量时,可以使用 dynamic关键字,C将让我们对变量成员进行假设。
例如,如果你想声明一个新的 Course对象,你这样做:

Course newCourse = new Course();
newCourse.Schedule();

当然,这假设你有一个 Course类定义了我们程序中的其他地方,如下所示:

class Course {
public void Schedule()
{
//Something fancy here
}
}

但如果你不知道新对象的类是什么呢?
你如何处理这个?
你可以把它声明为 Object,因为一切都源于 Object, 正确的?
这是代码: Object newCourse = new Object();不是那么快,如果你下一行: newCourse.Schedule();注意Quiggly Line几乎立即出现,并且我们获得了着名的"对象不包含计划..."在设计时错误列表中的错误。
但是,你可以这样做:

dynamic newCourse = SomeFunction();
newCourse.Schedule();

所有此代码都需要具有返回某个值的函数的存根,并且我们很高兴。
如果什么 SomeFunction()返回一个字符串?
嗯,你得到一个运行时错误。
但它仍然可以编译!

关于现在你可能会想:"这是一件好事吗?
如何!?
!"暂时,你可以责怪COM。
我们看,COM主要由C ++构造,具有变体类型。
在C ++中,我们可以声明一个变量是动态的,如下所示: VARIANT newCourse;它与动态类型一样,除了尚未发明的CWA。
无论如何,因为在com中使用了很多物体 VARIANT参数,使用.NET处理Interop真的很难。
因为Microsoft Office大多由COM对象制作,因为它不会很快更改,而且因为Microsoft所有CPRALMMERS都是Office开发人员,因为有一天,BAM,你有动态类型。

例如,说,你的 newCourse是来自COM类中的方法的变型参数。
要获得值,我们必须声明它是一个对象,如下所示:

CourseMarshaller cm = new CourseMarshaller(); //a COM object
int courseId = 4;
Object newCourse;
cm.MakeCourse(courseId, newCourse);
//and now we are back to square one
newCourse.Schedule(); //This causes a 'member not found exception'

第6行不会编译,即使计划方法存在,因为我们无法假设 newCourse将始终作为类对象回来,因为它被声明了一个变体。
你被困了。
但是,使用动态类型,我们可以再次金色,使用此代码:

CourseMarshaller cm = new CourseMarshaller(); //a COM object
int courseId = 4;
dynamic newCourse;
cm.MakeCourse(courseId, newCourse);
newCourse.Schedule(); //This now compiles

如果发生了什么 newCourse回来是没有安排方法的东西?
你得到一个运行时错误。
但这有 try/catch运行时错误的块。
没有什么能帮助它没有 dynamic关键词。

是长期视觉基本程序员,甚至更新的VB.NET程序员的读者意识到我们可以动态处理此函数 - 并且始终能够在Visual Basic中实现。
一些开发人员建议使用遗留系统的程序员使用Visual Basic的新代码,这正是为什么。

为了语言奇偶校验,现在CCAN也这样做。
一般来说,这很好,因为许多组织正在在vb中编写遗留代码和c-中的新代码,它可以在战壕中变得非常乱。
此更改使代码基础更纤薄。