问题列表 - 第37675页

当一个对象被强制转换为基类时,它如何记住它的真实含义?

这是初学者的问题,但我有兴趣了解这里发生了什么.我的问题是,当你向下投射一个物体时幕后会发生什么?它是否保留了关于它最初的内容的某种元数据?这就是我的意思:

假设我有一个名为"ClockIn"的方法,它接受"Employee"类型的参数:

public static void ClockIn(Employee employee)
{
   var manager = employee as Manager;
   if (manager != null)
   {
      manager.OpenSafe();
   }
}
Run Code Online (Sandbox Code Playgroud)

因此,假设Manager是Employee类型的子类,并且它具有"OpenSafe"方法:

public class Manager : Employee 
{
   public void OpenSafe()
   { 
      ... 
   }
}
Run Code Online (Sandbox Code Playgroud)

"ClockIn"方法,如果发现Manager已被传入,则调用OpenSafe方法.如:

var bob = new Manager();
ClockIn(bob);
Run Code Online (Sandbox Code Playgroud)

在这里,我将一个类型为Manager的实例传递给一个接受基类Employee的方法.在调用OpenSafe之前,我需要将ClockIn方法中的实例强制转换为Manager.

问题是,是否有一些元数据记得"bob"是一名经理,即使我已将他作为员工传递给他?代码如何知道他确实可以被投射到经理?堆中有什么东西在进行吗?

c# casting

23
推荐指数
2
解决办法
2566
查看次数

包装我们的软件库以提供C++和C#客户端应用程序的最佳方法是什么?

我正在开始一个新项目的工作,其核心产品是软件库.现有的代码我们将用C++编写,因为它是非常密集的数字; 我们拥有并编译这个核心代码.

我相信我们将有两个突出的客户端类型:1.用C++编写的应用程序,可能是MFC 2.用C#.NET编写的应用程序.

问题:为了给这两种客户类型提供"理想"的接口,我们使用什么技术?例如,我们可以提供两个接口,一个使用C/C++函数和C++客户端的回调,另一个使用C#.NET为C#客户端?另外,原则上,这可以在一个DLL中很好地完成,还是我们想要两个(或更多)?

其他信息 ...客户端应用是嵌入式的,而不是台式机或笔记本电脑 假设任何UI不是基于Windows的.此外,我们还必须编译和测试32位和64位,可能是32位的C++和64位的C#.

我在这里道歉 - 我意识到这个问题可能先前被问过并回答过,但如果是这样的话,我无法找到它.

c# c++ dll

3
推荐指数
1
解决办法
147
查看次数

Java 64位JDK问题

如果我使用64位JDK编译一些java文件然后从它们中创建一个JAR文件,那么生成的JAR是否正确地使用32位JRE,或者我是否必须使用32位JDK?

谢谢

java 64-bit

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

有没有办法在不编译的情况下运行短代的Java代码?

有没有办法运行或模拟运行Java语句(有点像IDLE - Python GUI)而无需编译和运行可执行文件?我想快速测试语句,看看它们是否有效.谢谢.

java

15
推荐指数
3
解决办法
7235
查看次数

如何在 WinForm 组件的 UI 线程上调用?

我正在编写一个 WinForm 组件,在那里我启动一个任务来进行实际处理并在继续时捕获异常。从那里我想在 UI 元素上显示异常消息。

Task myTask = Task.Factory.StartNew (() => SomeMethod(someArgs));
myTask.ContinueWith (antecedant => uiTextBox.Text = antecedant.Exception.Message,
                     TaskContinuationOptions.OnlyOnFaulted);
Run Code Online (Sandbox Code Playgroud)

现在我收到一个跨线程异常,因为该任务正在尝试从一个明显的非 UI 线程更新 UI 元素。

但是,在 Component 类中没有定义 Invoke 或 BeginInvoke。

如何从这里开始?


更新

另外,请注意 Invoke/BeginInvoke/InvokeRequired 在我的 Component 派生类中不可用,因为 Component 不提供它们。

user-interface components invoke winforms

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

Resque工作者发出"NoMethodError:undefined method`admand`"

我不知道我在这里做了什么,但是我试图让Rails中的一个控制器将一个作业排队到Resque上,然后一个工作者连接并完成繁重的工作(IE比较,数据库条目).
但是,任务甚至没有运行,因为没有明确的说明来设置Resque up.

复制并粘贴如下:
也有Gist格式!

这是Hoptoad的例外情况:

NoMethodError: undefined method 'perform' for Violateq:Module
Run Code Online (Sandbox Code Playgroud)

这是"worker"文件的内容:

module Violateq
  @queue = :violateq

  def perform(nick, rulenumber)
    # Working for the weekend!!!
    puts "I got a nick of #{nick} and they broke #{rulenumber}"
    @violation = Violation.new(nick, rulenumber)
    puts "If you got this far, your OK"
    log_in(:worker_log, {:action => "Violate d=perfom", :nick => nick, :rulenumber => rulenumber, :status => "success"})
    #rescue => ex
    # notify_hoptoad(ex)
    # log_in(:worker_log, {:action => "Violate d=perfom", :nick => nick, :rulenumber => rulenumber, …
Run Code Online (Sandbox Code Playgroud)

ruby resque ruby-on-rails-3

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

如何在VB中传递线程中的多个参数

我想在VB 2008中将两个或更多参数传递给一个线程.

以下方法(修改)在没有参数的情况下工作正常,我的状态栏更新非常酷.但我似乎无法使用一个,两个或更多参数.

这是按下按钮时我想要发生的伪代码:

Private Sub Btn_Click() 

Dim evaluator As New Thread(AddressOf Me.testthread(goodList, 1))
evaluator.Start()

Exit Sub
Run Code Online (Sandbox Code Playgroud)

这是testthread方法:

Private Sub testthread(ByRef goodList As List(Of OneItem), ByVal coolvalue As Integer)

    StatusProgressBar.Maximum = 100000
    While (coolvalue < 100000)
        coolvalue = coolvalue + 1
        StatusProgressBar.Value = coolvalue
        lblPercent.Text = coolvalue & "%"
        Me.StatusProgressBar.Refresh()
    End While

End Sub
Run Code Online (Sandbox Code Playgroud)

vb.net multithreading visual-studio

14
推荐指数
3
解决办法
9万
查看次数

用scala以编程方式替换xml值

我正在编写一个工具来使用scala更新一些xml文件(本例中为pom.xml),因为它在java中的工作量明显高于(理论上)scala.我可以很好地解析xml文件,但我需要替换现有xml中的节点并重写结果.例如:

<dependency>
    <groupId>foo</groupId>
    <artifactId>bar</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

所以我想找到这样的所有节点并将其替换为:

<dependency>
    <groupId>foo</groupId>
    <artifactId>bar</artifactId>
    <version>1.0</version> <!-- notice the lack of -SNAPSHOT here -->
</dependency>
Run Code Online (Sandbox Code Playgroud)

所以,我可以简单地获得所有版本节点,但是如何用我想要的节点替换它们?

// document is already defined as the head of the xml file
nodes = for (node <- document \\ "version"; if (node.text.contains("SNAPSHOT"))) yeild node
Run Code Online (Sandbox Code Playgroud)

那我想做点什么:

for (node <- nodes) {
    node.text = node.text.split("-")(0)
}
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为节点是不可变的.我查看了Node的复制方法,但它不包含text在参数中.

xml scala

4
推荐指数
1
解决办法
3428
查看次数

jquery/view中的T4MVC url.action

这可能是也可能是不可能的(并且很可能在文档中,但我只是错过了它).

如何在我的视图中使用T4MVC构建Url.Action(),这将允许我使用jQuery选择器.我一直在尝试以下(在我的javascript中)没有成功:

function cancelHoldBooking() {
    var url = '<%= Url.Action(MVC.FundProperty.CancelLock($("#propertyid").val())) %>';
    // other code omitted for brevity
}
Run Code Online (Sandbox Code Playgroud)

我能够成功地做到以下几点:

function cancelHoldBooking() {
    var url = '<%= Url.Action("CancelLock", "FundProperty") %>';
    url += "?id=" + $("#propertyid").val();
    // other code omitted for brevity - in this case   
    // **I could of course have used the**:
    // var params = {id: $('#propertyid').val()};
    // **object**
}
Run Code Online (Sandbox Code Playgroud)

我知道当答案到来时,这将是一个'doh'时刻,但对于我的生活,我无法弄清楚这一点!

干杯...

[编辑] - 我想补充一点,如果我省略MVC.FundProperty.CancelLock()id参数并试图通过$ ajax调用发送params对象,那么编译器会抱怨调用中缺少的参数.因此,我不能通过在CancelLock()调用中调用$ ajax params对象而没有参数来绕过javascript mish-mash.令人沮丧的:(

asp.net-mvc t4mvc

2
推荐指数
1
解决办法
2368
查看次数

oracle 10g sql带子句编译错误

编译错误说"mm"和"cc"是无效的标识符!

with m as (
  select instructor, 
         count(*) as c 
    from class 
group by instructor),
     mm as ( 
  select max(m.c) as cc 
    from m)
select m.instructor 
  from m 
 where m.c = mm.cc;
Run Code Online (Sandbox Code Playgroud)

sql oracle oracle10g ora-00904

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