标签: late-binding

晚期绑定与多态性 - 有什么区别?

我已经看到两者互换使用,但他们真的是一样的意思吗?根据我的理解,Polymorphism延伸了这样一个事实:你可以通过子类的实例交换类的实例,而Late Binding意味着当你调用实例的方法时,类型决定调用哪个方法(子类/超类) .

oop polymorphism late-binding

7
推荐指数
1
解决办法
7335
查看次数

Java中的Binding和Dispatching有什么区别?

关联名称太多:早期和晚期绑定,静态和动态调度,运行时与编译时多态等等,我不明白其中的区别.

我找到了明确的解释,但这是正确的吗?我会解释JustinC:

绑定:是确定变量的类型(对象?).如果它在编译时完成,它的早期绑定.如果它是在运行时完成的,那就是后期绑定.

Dispatch:确定哪个方法与方法调用匹配.Static Dispatch是编译时的计算方法,而动态调度是在运行时执行的.

绑定是否将原始值和引用变量分别与原始值和对象进行匹配?

编辑:请给我一些明确的参考资料,以便我可以阅读更多相关信息.

java late-binding dynamic-dispatch early-binding static-dispatch

7
推荐指数
1
解决办法
837
查看次数

使用实时示例在java中反射和后期绑定之间的区别

在学习Java教程时,Reflection和Late Binding让我很困惑.在一些教程中,他们写过它们都是相同的,并且Reflection和Late Binding之间没有任何区别.但其他教程表示存在差异.

我很困惑,所以有人可以解释一下Java中的Reflection和Late Binding是什么,如果可行的话,请给我一些真实世界的例子.

谢谢..

java reflection late-binding

6
推荐指数
1
解决办法
3460
查看次数

在C#中调用System.Delegate类对象

我正在尝试构建一个使用System.ComponentModel.ISynchronizeInvoke的对象,该对象具有以下方法:(其中包括)

    public object Invoke(Delegate method, object[] args)
Run Code Online (Sandbox Code Playgroud)

使用给定参数调用方法的最佳方法是什么?我可以用:

    public object Invoke(Delegate method, object[] args)
    {
        return method.DynamicInvoke(args);
    }
Run Code Online (Sandbox Code Playgroud)

但这是后期限制.我的直觉是,这是调用方法的唯一方法..任何想法?

c# delegates invoke late-binding

6
推荐指数
1
解决办法
2312
查看次数

PHP __DIR__评估运行时(后期绑定)?

是否有可能获得PHP文件的位置,在运行时进行评估?我正在寻找类似于魔术常量的东西__DIR__,但在运行时进行评估,作为后期绑定.类似的差异selfstatic:

__DIR__ ~ self
  ???   ~ static
Run Code Online (Sandbox Code Playgroud)

我的目标是在抽象类中定义一个方法,使用__DIR__它来分别为每个继承类评估.例:

abstract class Parent {
  protected function getDir() {
    // return __DIR__; // does not work
    return <<I need this>>; // 
  }
}

class Heir extends Parent {
  public function doSomething() {
    $heirDirectory = $this->getDir();
    doStuff($heirDirectory);
  }
}
Run Code Online (Sandbox Code Playgroud)

显然,只有当出现此问题Parent,并Heir在不同的目录.请考虑到这一点.而且,getDir在各种继承人类中反复定义似乎并不是选项,这就是我们继承的原因......

php inheritance late-binding dir

6
推荐指数
1
解决办法
550
查看次数

晚期基于CPU架构绑定到dll

我目前正在编写一个帮助库,通过Software Toolbox的TopServer连接到车间PLC .

TopServer库有x86和x64架构的单独版本,我想在运行时使用基于调用代码的CPU架构的后期绑定来加载适当的版本.两个库中的方法具有相同的签名.

我可以使用反射来使用下面的代码加载相关对象,但我想知道在调用代码中使用此实例的最佳方法是什么.

public class LateBinding
{
    public static T GetInstance<T>(string dllPath, string fullyQualifiedClassName) where T : class
    {
        Assembly assembly = System.Reflection.Assembly.LoadFile(dllPath);
        Type t = assembly.GetType(fullyQualifiedClassName);

        return (T)Activator.CreateInstance(t);
    }
}
Run Code Online (Sandbox Code Playgroud)

由于我是后期绑定,我没有获得运行前的类型,所以认为创建基于库方法签名的接口将是实现这两个版本的好方法.

有没有人对这种方法或其他方法的建议有看法?

.net c# reflection late-binding

6
推荐指数
1
解决办法
489
查看次数

在C#中从动态获取属性时,如何检查枚举属性?

假设我知道Color对象的属性返回一个如下所示的枚举:

enum ColorEnum {
   Red,
   Green,
   Blue
};
Run Code Online (Sandbox Code Playgroud)

我想检查一个未知类型的特定对象(我知道有Color属性)已Color设置为Red.如果我知道对象类型,这就是我要做的事情:

ObjectType thatObject = obtainThatObject();
if( thatObject.Color == ColorEnum.Red ) {
   //blah
}
Run Code Online (Sandbox Code Playgroud)

问题是我没有对程序集的引用,ColorEnum也不知道对象类型.

所以我有以下设置:

dynamic thatObject = obtainThatObject();
Run Code Online (Sandbox Code Playgroud)

而我无法施放,因为我不知道对象类型(和枚举类型).我应该怎么检查Color

if( thatObject.Color.ToString() == "Red" ) {
    //blah
}
Run Code Online (Sandbox Code Playgroud)

确实有效,但它看起来像我在"每日WTF"中看到的货物崇拜代码中最糟糕的例子.

我该如何正确检查?

.net c# enums dynamic late-binding

6
推荐指数
1
解决办法
543
查看次数

为什么Spliterators.spliteratorUnknownSize()不是后期绑定?

我今天读了一下spliterators并实现了一个使用Spliterators.spliteratorUnknownSize(iterator(), Spliterator.NONNULL).根据spliteratorUnknownSize()文件

[结果]分裂器不是后期绑定的

作为分裂者的新手,我想知道为什么会这样.如果我确保iterator()后期绑定,那么得到的分裂器也应该是,不是吗? spliteratorUnknownSize()仅仅创建一个IteratorSpliterator不与元素源绑定的东西.

也就是说,我很想理解为什么得到的分裂器没有后期绑定.谢谢.

java late-binding spliterator

6
推荐指数
1
解决办法
206
查看次数

后期绑定问题!

我在接受采访时被问到这个问题.

就我的知识而言,后期绑定是在运行时动态识别符号.如果我错了,请纠正我.

我被问到一个问题,比如我们在c ++中使用后期绑定时会遇到的问题是什么.我实际上是出于我自己的想法.

请你分享一下你职业生涯中可能遇到的问题.

谢谢.

c++ binding dynamic late-binding

5
推荐指数
1
解决办法
1006
查看次数

重写 toString() 是否被视为多态?

我今天参加 Java 考试,考官问我是否可以提供在 Spring Boot 项目中使用多态性的示例。

由于我一开始想不出任何东西,他指出我在模型中重写了toString() ,这是动态/运行时多态性。

但是,我不确定我是否理解他的观点,因为根据我的理解,当我们有一个指向子类对象的父类引用变量(关注动态多态性)时,行为被认为是多态的。

然后在运行时,获取父类变量指向的实际对象并调用其方法,如此处很好地解释

但是,我在项目中没有使用向上转换(即使用 Object 类变量初始化 POJO 类)。

因此,我的问题是 -尽管父类(Object)从未用作引用变量,但重写 toString() 是否被视为多态?

我在 Stackoverflow 上找到的所有运行时多态性示例(包括此处的示例和带有toString 的示例)都说明了一种情况,即我们有一个父类变量指向子类对象,例如:

    Object object = new User("petar");
    String name = object.toString(); // assign to variable for clarity`s sake
    System.out.println(name);
    // prints petar
Run Code Online (Sandbox Code Playgroud)

我的用户类别是:

public class User {

    String name;

    public User(String name) {
        this.name = name;
    }

    public String toString() {
        return name;
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,在我的项目中,我只是使用自己的引用变量创建用户和其他 POJO 类,例如:

    User user = …
Run Code Online (Sandbox Code Playgroud)

java polymorphism overriding late-binding upcasting

5
推荐指数
1
解决办法
1753
查看次数