在讨论计算机语言的演变时,Alan Kay说他的Smalltalk最重要的一个属性是后期绑定; 它赋予语言可塑性和可扩展性,并允许不适当的耦合随着时间的推移被重构.你同意吗?是否有早期约束的补偿优势可以解释为什么它似乎是两个范式的主导,哪个域可以使用?
基于使用javascript,jQuery,jsext,actionscript,php,java,RoR和asp.net实现Web应用程序的个人经验(不是广泛或深度不具有权威性)似乎暗示了后期绑定和膨胀之间的正相关减少.早期绑定我肯定有助于检测和防止某些类型的安全错误,但自动完成和良好的IDE以及一般的良好编程实践也是如此.因此,在我的风险规避方面恢复我的理性观点之前,我倾向于抓住自己为后期约束方而生根.
但我对如何平衡权衡并没有很好的理解.
我有以下代码:
class Pet {
public:
virtual string speak() const { return ""; }
};
class Dog : public Pet {
public:
string speak() const { return "Bark!"; }
};
int main() {
Dog ralph;
Pet* p1 = &ralph;
Pet& p2 = ralph;
Pet p3;
// Late binding for both:
cout << "p1->speak() = " << p1->speak() <<endl;
cout << "p2.speak() = " << p2.speak() << endl;
// Early binding (probably):
cout << "p3.speak() = " << p3.speak() << endl;
} …
Run Code Online (Sandbox Code Playgroud) 关联名称太多:早期和晚期绑定,静态和动态调度,运行时与编译时多态等等,我不明白其中的区别.
我找到了明确的解释,但这是正确的吗?我会解释JustinC:
绑定:是确定变量的类型(对象?).如果它在编译时完成,它的早期绑定.如果它是在运行时完成的,那就是后期绑定.
Dispatch:确定哪个方法与方法调用匹配.Static Dispatch是编译时的计算方法,而动态调度是在运行时执行的.
绑定是否将原始值和引用变量分别与原始值和对象进行匹配?
编辑:请给我一些明确的参考资料,以便我可以阅读更多相关信息.
java late-binding dynamic-dispatch early-binding static-dispatch
我从CRM生成实体,如下所示:
CrmSvcUtil.exe /url:http://<servername>/<organizationname>/XRMServices/2011/Organization.svc
/out:<outputfilename>.cs /username:<username> /password:<password> /domain:<domainname>
/namespace:CRMEntities /serviceContextName:XrmServiceContext
Run Code Online (Sandbox Code Playgroud)
对于serviceContextName,我设置了XrmServiceContext.我想使用下一个代码从CRM中检索一些实体:
var context = new XrmServiceContext(myorgserv);
var marketingList = context.ListSet.Where(item => item.Id == new Guid("SOME GUID"));
Run Code Online (Sandbox Code Playgroud)
我收到错误:
Message "Unable to cast object of type 'Microsoft.Xrm.Sdk.Entity' to type 'CRMEntities.List'."
Run Code Online (Sandbox Code Playgroud)
在"添加到监视"之后,我看到上下文中的每组实体都有相同的消息.我错过了什么?
JavaScript 的后期绑定很棒。但是我想怎么提前绑定呢?
我正在使用 jQuery 将循环中的事件处理程序链接添加到 div。变量“aTag”在循环中发生变化。当我稍后单击链接时,所有链接都会发出相同的消息,即“aTag”的最后一个值。如何将不同的警报消息绑定到所有链接?
所有链接都应该在添加事件处理程序时使用 'aTag' 的值发出警报,而不是在单击它时。
for (aTag in tagList) {
if (tagList.hasOwnProperty(aTag)) {
nextTag = $('<a href="#"></a>');
nextTag.text(aTag);
nextTag.click(function() { alert(aTag); });
$('#mydiv').append(nextTag);
$('#mydiv').append(' ');
}
}
Run Code Online (Sandbox Code Playgroud) 我们正在尝试在CRM2011插件中使用早期绑定类型.要启用此功能,我们需要添加ProxyTypesBeavior()
或调用EnableProxyTypes()
.但是,这两个属性都适用于OrganizationServiceProxy
类,并且在IOrganizationService
接口上不存在.
因此,如果我们使用以下代码来获取组织服务,那么我们如何获取代理类来设置上述属性?
var serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
var service = serviceFactory.CreateOrganizationService(context.UserId);
Run Code Online (Sandbox Code Playgroud) 我一直在转换我的一些CRM4.0插件来使用CRM2011 SDK.我刚刚开始使用LINQ for Early-Bound实体并遇到了一个问题.
我试图在连接的实体中获取OptionSetValue的格式化值.在查看此MSDN SDK查询示例后,我设法检索主要实体的格式化值,但似乎无法将其转换为已连接的实体.
下面的代码是我正在尝试实现的示例.我开始使用SDK示例中的代码.
var query_join8 = (from a in sContext.AccountSet
join c in sContext.ContactSet
on a.PrimaryContactId.Id equals c.ContactId
into gr
from c_joined in gr.DefaultIfEmpty()
select new
{
contact_name = c_joined.FullName,
account_name = a.Name,
account_addresstypecode = a.Address1_AddressTypeCode,
account_addresstypename = a.FormattedValues.ContainsKey("address1_addresstypecode") ? a.FormattedValues["address1_addresstypecode"] : null,
account_formattedValues = a.FormattedValues,
contact_addresstypecode = c_joined.Address1_AddressTypeCode,
contact_addresstypename = c_joined.FormattedValues.ContainsKey("address1_addresstypecode") ? c_joined.FormattedValues["address1_addresstypecode"] : null,
contact_formattedValues = c_joined.FormattedValues,
}).ToArray();
Run Code Online (Sandbox Code Playgroud)
account_formattedValues和account_addresstypename遇到纠正,我可以访问该数据,但由于某种原因,contact_formattedValues项包含一个空集合,因此contact_addresstypename为null.
我这样做不正确,还是我错过了什么?有没有人能够或知道如何实现这一目标?任何帮助是极大的赞赏.
如何使用crm 2011 sdk和XrmServiceContext创建事务?
在下一个示例中,“ new_brand”是一些自定义实体。我想创建三个品牌。第三有错误的OwnerID guid。当我调用SaveChanges()方法时,创建了两个品牌,但出现了异常。如何回滚前两个品牌的创建?
是否可以不使用插件和工作流程?
using (var context = new XrmServiceContext(connection))
{
SystemUser owner = context.SystemUserSet.FirstOrDefault(s => s.Id == new Guid("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"));
// create 3 brands
new_brand b1 = new new_brand();
b1.new_brandidentification = 200;
b1.new_name = "BRAND 200";
b1.OwnerId = owner.ToEntityReference();
context.AddObject(b1);
new_brand b2 = new new_brand();
b2.new_brandidentification = 300;
b2.new_name = "BRAND 300";
b2.OwnerId = owner.ToEntityReference();
context.AddObject(b2);
new_brand b3 = new new_brand();
b3.new_brandidentification = 400;
b3.new_name = "BRAND 400";
b3.OwnerId = new EntityReference(SystemUser.EntityLogicalName, new Guid("00000000-0000-0000-0000-000000000000"));
context.AddObject(b3);
context.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud) sdk transactions transactionscope early-binding dynamics-crm-2011
我正在寻找一种检索自定义实体属性的方法,而不使用crmsvcutil生成早期绑定类型.
我的问题有什么解决方案吗?
我喜欢在我的VBA项目中使用早期绑定,因为我喜欢在开发过程中自动完成方法名称等.我也很有信心知道编译器会在我拼写错误的方法名称时发出警告.
但是,要使用早期绑定,我需要添加对相关库的引用(例如,"Microsoft Scripting Runtime").这对于那样的"标准"库来说很好,但有时我想使用可能存在或不存在于用户机器上的库.
理想情况下,如果库不存在(例如"xyz未安装在此计算机上,因此无法使用此功能"),我希望显示有用的消息.如果我只使用后期绑定,那么我可以这样做:
Dim o As Object
Set o = CreateObject("foo", "bar")
If o Is Nothing Then
MsgBox "nope"
End If
Run Code Online (Sandbox Code Playgroud)
但是,如果我添加了对库的引用以便使用早期绑定,那么如果库不存在,则在加载VBA项目时会出现编译错误.因此,没有代码运行(包括检测库不存在的代码).
围绕这个捕获22有什么办法吗?
在C#中,如果我有
public class BaseClass
{
//BaseClass implementation
}
public class Derived : BaseClass
{
//Derived implementation
}
public class AnotherClass
{
AnotherClass(BaseClass baseClass)
{
//Some code
}
AnotherClass(Derived derived) : this(derived as BaseClass)
{
//Some more code
}
}
Run Code Online (Sandbox Code Playgroud)
然后做:
BaseClass baseVariable = new Derived();
AnotherClass anotherVariable = new AnotherClass(baseVariable);
Run Code Online (Sandbox Code Playgroud)
这将导致早期绑定,调用该AnotherClass(BaseClass)
方法.
相反,如果我使用dynamic
关键字转换它- 或者使用动态实例化变量然后将其作为构造函数参数传递,AnotherClass(Derived)
则将调用它:
BaseClass baseVariable = new Derived();
//This will instantiate it using the AnotherClass(Derived)
AnotherClass anotherVariable = new AnotherClass(baseVariable as dynamic);
Run Code Online (Sandbox Code Playgroud)
方法是否在C#中进行早期绑定(在编译时评估)?这意味着,有没有其他方式或技巧 确定对其他类构造函数的主要派生调用 …
early-binding ×11
c# ×5
late-binding ×4
c++ ×1
java ×1
javascript ×1
jquery ×1
linq ×1
plugins ×1
polymorphism ×1
sdk ×1
smalltalk ×1
transactions ×1
vba ×1