小编You*_*f13的帖子

分配后意外的不相等

鉴于以下代码:

using System;

class MyClass
{
    public MyClass x;
}

public static class Program
{
    public static void Main()
    {
        var a = new MyClass();
        var b = new MyClass();
        a.x = (a = b);
        Console.WriteLine(a.x == a);
    }
}
Run Code Online (Sandbox Code Playgroud)

前两行很明显,只是两个不同的对象。

我假设第三行执行以下操作:

  • 该部分(a = b)分配ba并返回b,因此现在a等于b
  • 然后,a.x分配给b

这意味着,a.x等于b,也b等于a。这意味着a.x等于a

但是,代码打印False.

这是怎么回事?

c#

26
推荐指数
3
解决办法
1021
查看次数

在 .NET 中使用 ConfigureAwait

我在很多地方都读过 ConfigureAwait(包括 SO 问题),以下是我的结论:

  • ConfigureAwait(true):在与运行 await 之前的代码相同的线程上运行其余代码。
  • ConfigureAwait(false):在运行等待代码的同一线程上运行其余代码。
  • 如果 await 后跟访问 UI 的代码,则任务应附加.ConfigureAwait(true). 否则,由于另一个线程访问 UI 元素,将发生 InvalidOperationException。

我的问题是:

  1. 我的结论正确吗?
  2. ConfigureAwait(false) 什么时候可以提高性能,什么时候不能?
  3. 如果为 GUI 应用程序编写,但下一行不访问 UI 元素。我应该使用 ConfigureAwait(false) 还是 ConfigureAwait(true) ?

.net c# asynchronous async-await configureawait

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

工厂设计模式和违反 OCP(开闭原则)

本教程中的工厂显然违反了 OCP。每次在系统中添加一个形状,我们都需要在工厂中添加它以支持它。我正在考虑另一个实现,我想知道是否有任何缺点。

public class ShapeFactory {

   //use getShape method to get object of type shape
   public Shape getShape(Class<? extends Shape> shapeType){
      return shapeType.newInstance();
   }
}
Run Code Online (Sandbox Code Playgroud)

这个实现看起来不违反OCP,也不复杂。有什么原因我找不到任何提到它的工厂设计模式教程吗?

java factory open-closed-principle

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

java中时间轴和线程有什么区别

以下两个简单的片段执行相同的操作,"Hello, world"每秒打印一次。但它们之间有什么区别呢?什么时候应该使用线程,什么时候应该使用时间轴。Timeline 内部是否启动一个线程?如果没有,如何在不阻塞主线程的情况下每秒执行一次打印?

Timeline timeline = new Timeline(new KeyFrame(Duration.seconds(1), e -> System.out.println("Hello, world")));
timeline.setCycleCount(-1);
timeline.play();
Run Code Online (Sandbox Code Playgroud)
new Thread(() -> {
    while (true) {
        System.out.println("Hello, world!");
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}).start();
Run Code Online (Sandbox Code Playgroud)

而且,在第二个片段中,如果我这样做Thread.sleep(some_volatile_variable_of_main_thread_that_changes_overtime),我如何使用Timeline.

java multithreading javafx

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

不合逻辑的 C6001 警告:在 Visual Studio 中使用 C 中的未初始化内存警告

鉴于此代码:

#include <stdlib.h>

typedef struct
{
    int *p;
} MyStruct;

MyStruct Test()
{
    MyStruct ms;
    ms.p = malloc(sizeof(int) * 5);
    if (!ms.p) exit(-1);
    return ms;
}

int main(void)
{
    while (1)
    {
        MyStruct t = Test();
        free(t.p); // C6001: Using uninitialized memory 't.p'.
    }
}
Run Code Online (Sandbox Code Playgroud)

Visual Studio 在呼叫线路上显示 C6001 警告free。但是,我发现没有办法在内存 tp 未初始化的情况下实现空闲线。我缺少什么?

在此输入图像描述

c malloc free struct

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

C#:周围的空间!运营商,如何解读?

我不是每天都阅读C#,并且正在阅读最近提交的东西,这些东西让我感到害怕:

if (( length > maxLength) && ! IsTable(furniture.FurnitureType))
do_something;
Run Code Online (Sandbox Code Playgroud)

我在精神上解析&&和!运营商,特别是因为!运营商之后有一个空间.

问题可以归结为:

是(有空间)

if (( length > maxLength) && ! IsTable(furniture.FurnitureType))
Run Code Online (Sandbox Code Playgroud)

与(没有空格)相同:

if (( length > maxLength) && !IsTable(furniture.FurnitureType))
Run Code Online (Sandbox Code Playgroud)

具体问题是:

  • IsTable(),无论是真还是假,都改变了评价?
  • 之后的空间!基本上让第一个eval完成所有的工作?

或者,我是否缺少可接受的语法.

c#

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

C#中具有混合数据类型的数组

给出以下代码:

void Main()
{
    dynamic[] arr = { 5, "test2", "test3"};
    foreach (var i in arr)
    {
        Console.WriteLine(i.GetType().Name);
    }
}
Run Code Online (Sandbox Code Playgroud)

它显示以下内容:

Int32
String
String
Run Code Online (Sandbox Code Playgroud)

我不明白数组如何具有不同类型的元素。从C背景来看,数组元素应具有相同的类型,并且每个元素都应占用相同数量的RAM。因为在C,像arr[i]就相当于*(arr + i)和指针arr会移动i * sizeof(arr data type)的步骤。

c# arrays

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

为什么奇偶校验标志为 1 而奇偶校验标志为奇数

执行以下两条指令后:

MOV BX, 0FD51H                                        
DEC BX
Run Code Online (Sandbox Code Playgroud)

我得到奇偶校验标志 = 1(表示偶数个)

但是,递减值的二进制表示为:

1111 1101 0101 0000

它有 9 个 1(即奇数个 1)。

此外,NEG BX在此之后执行导致 PF = 0。但是,2 的补码是:

0000 0010 1011 0000有偶数个。所以我期望 PF = 1。

assembly x86-16 eflags emu8086

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

printf 如何知道变量传递的是有符号还是无符号

鉴于以下代码片段:

signed   char x = 150;
unsigned char y = 150;
printf("%d %d\n", x, y);
Run Code Online (Sandbox Code Playgroud)

输出是:

-106 150
Run Code Online (Sandbox Code Playgroud)

但是,对于以相同方式在内存中表示的变量,我使用了相同的格式说明符。printf 如何知道它是有符号的还是无符号的。

两种情况下的内存表示为:

10010110
Run Code Online (Sandbox Code Playgroud)

c printf unsigned signed

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