标签: explicit

绑定UpdateSourceTrigger = Explicit,在程序启动时更新源

我有以下代码:

<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid>
    <TextBox Text="{Binding Path=Name, 
                            Mode=OneWayToSource, 
                            UpdateSourceTrigger=Explicit, 
                            FallbackValue=default text}" 
             KeyUp="TextBox_KeyUp" 
             x:Name="textBox1"/>
</Grid>
Run Code Online (Sandbox Code Playgroud)

    public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();
    }

    private void TextBox_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Enter)
        {
            BindingExpression exp = this.textBox1.GetBindingExpression(TextBox.TextProperty);
            exp.UpdateSource();
        }
    }
}



    public class ViewModel
{
    public string Name
    {
        set
        {
            Debug.WriteLine("setting name: " + value);
        }
    }
}



    public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs …
Run Code Online (Sandbox Code Playgroud)

wpf binding explicit updatesourcetrigger

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

是否有借口从隐式转换中抛出异常?

来自MSDN:

通过消除不必要的强制转换,隐式转换可以提高源代码的可读性.但是,因为隐式转换可以在程序员指定它们的情况下发生,所以必须注意防止令人不快的意外.通常,隐式转换运算符不应该抛出异常并且永远不会丢失信息,以便在没有程序员意识的情况下可以安全地使用它们.如果转换运算符不符合这些条件,则应将其标记为显式.

虽然我并不反对任何特定的观点,并且我同意这一切都非常好,但有没有一个理由可以保证打破关于隐式转换而不抛出异常的部分?

我面前的具体案例是:

  1. 我有一个函数,它返回一个自定义集合对象(我们称之为FooCollection).
  2. 此函数可以返回具有单个项目的集合,并且可以从源代码确定是否会发生这种情况.(我的意思是函数调用,而不是函数本身)
  3. 如果确实发生了这种情况,那么用户想要该单个项目的可能性为99.9%,而不是具有单个项目的集合.

现在,我正在讨论是否包含来自FooCollection=> 的隐式转换Foo来隐藏这个小实现细节,但这种转换只有在集合中有一个项目时才有效.

Exception在这种情况下可以抛出吗?或者我应该使用显式演员代替吗?关于我如何处理这个的任何其他想法(不,由于实现细节,我不能只使用两个函数)?

编辑:我觉得值得注意的是,FooCollection没有实现任何接口或实际扩展Collection名称可能意味着,因此基于LINQ的答案是无用的.此外,虽然集合确实实现了数字索引,但它并不是处理集合的最直观方式,因为它主要依赖于命名索引.

c# casting explicit implicit

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

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

隐式<>显式接口

可能的重复:
C#:接口 - 隐式和显式实现
隐式与显式接口实现

你好

谁能解释一下隐式和显式接口之间的区别是什么?

谢谢!

.net c# explicit interface implicit

6
推荐指数
2
解决办法
947
查看次数

何时为多参数构造函数使用显式说明符?

我最近了解了explicit说明者.

假设我们有:

f( W, W, W );
Run Code Online (Sandbox Code Playgroud)

如果我们这样做

f( 42, 3.14, "seven" );
Run Code Online (Sandbox Code Playgroud)

编译器将尝试以下隐式转换:

f( W(42), W(3.14), W("seven") );
Run Code Online (Sandbox Code Playgroud)

如果我们为W定义了匹配的构造函数,即:

W(int);
W(double);
W(std::string);
Run Code Online (Sandbox Code Playgroud)

......它会成功的.

但是,如果我们明确第一个:

explicit W(int);
Run Code Online (Sandbox Code Playgroud)

...这会禁用隐式转换.

你现在必须写:

f( W(42), 3.14, "seven" );
Run Code Online (Sandbox Code Playgroud)

即它迫使您明确说明转换

现在回答这个问题:

有可能写:

explicit W(int,int); // 2 arguments!
Run Code Online (Sandbox Code Playgroud)

这编译!

但是我看不到任何可能需要这种语法的相应场景.

有人能提供一个最小的例子吗?

c++ constructor explicit c++11 multiple-arguments

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

这些加载DLL何时加载:隐式链接VS显式链接

我认为Implicit链接在应用程序启动后立即加载DLL,因为它也称为"加载时动态链接".但是我在下面的链接中找到了一些奇怪的解释(https://msdn.microsoft.com/en-us/library/253b8k2c(VS.80).aspx).

隐式链接

与程序代码的其余部分一样,DLL代码在进程启动时映射到进程的地址空间,并且只在需要时才加载到内存中.因此,.def文件用于控制以前版本的Windows中的加载的PRELOAD和LOADONCALL代码属性不再具有意义.

显式链接

隐式链接到许多DLL的应用程序启动很慢,因为Windows会在应用程序加载时加载所有DLL.为了提高启动性能,应用程序可以隐式链接到加载后立即需要的那些DLL,并等待在需要时显式链接到其他DLL.

从这里隐式链接的另一种解释(https://msdn.microsoft.com/en-us/library/151kt790.aspx).

隐式链接

Visual C++链接器现在支持DLL的延迟加载.这使您无需使用Windows SDK函数LoadLibrary和GetProcAddress来实现DLL延迟加载.

在Visual C++ 6.0之前,在运行时加载DLL的唯一方法是使用LoadLibrary和GetProcAddress; 当加载使用它的可执行文件或DLL时,操作系统将加载DLL.

从Visual C++ 6.0开始,当与DLL静态链接时,链接器提供延迟加载DLL的选项,直到程序调用该DLL中的函数.

应用程序可以使用带有辅助函数的/ DELAYLOAD(延迟加载导入)链接器选项延迟加载DLL(Visual C++提供的默认实现).辅助函数将通过为您调用LoadLibraryGetProcAddress在运行时加载DLL .

我真的很困惑,不知道如何理解这些.

1.隐式链接是在启动时还是仅在调用DLL中的函数时加载DLL?

这意味着两者最终都是类似的,因为LoadLibrary()是在引擎盖下调用的?

c++ dll linker explicit implicit

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

为什么我不能使用显式构造函数来构造返回类型

我玩了显式构造函数及其行为,所以我创建了这个类:

#include <iostream>

class X
{
public:
    explicit X(void)
    {
        std::cout << "Default constructor\n";
    }
    explicit X(X const& x)
    {
        std::cout << "Copy constructor\n";
    }
    explicit X(X&& x)
    {
        std::cout << "Move constructor\n";
    }
};
Run Code Online (Sandbox Code Playgroud)

这基本上只是测试显式构造函数的存根.然后我想尝试几种情况.所以我尝试了这个:

X foo(void)
{
    X a{};
    return a;  // ERROR: no matching constructor found!
}

int main()
{
    X w{};  // Default Constructor
    X x{w};  // Copy Constructor
    X y{std::move(x)};  // Move Constructor
    X z{foo()};
}
Run Code Online (Sandbox Code Playgroud)

你可以看到我不能回到a里面foo().我知道它尝试Foo使用复制构造函数初始化返回类型,但由于某种原因它无法使用它.

为什么它不能使用我提供的拷贝构造函数?我知道explicit …

c++ constructor explicit

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

在这种情况下,通过构造函数或显式函数更好的隐式转换是什么?

我正在创建自己的类,String仅用于学习目的.

我坚持到应该做出决定的地方.让我解释一下这件事.

我有两个班级选择.我将在下面仅发布相关的代码片段,因为我不想分散您对我手头的问题的注意力.如果为了帮助我,你需要更多信息,我很乐意提供.

选项1

class String {
    size_t _length;
    char* _stringHead;
public:
    String(const std::string&);
    String(const char*);
    String(const char);
};
String operator+(String, const String);

const bool operator==(const String, const String);
const bool operator!=(const String, const String);
const bool operator<(const String, const String);
const bool operator<=(const String, const String);
const bool operator>(const String, const String);
const bool operator>=(const String, const String);
Run Code Online (Sandbox Code Playgroud)

选项2

class String {
    size_t _length;
    char* _stringHead;
public:
    //irrelevant part of code in Option 2
    String(const std::string&);
    String(const …
Run Code Online (Sandbox Code Playgroud)

c++ constructor explicit header class

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

显式关键字应用于运算符而不是构造函数

在下面的课程中,

你为什么要做运营商explicit?我认为这explicit是为了防止对构造函数的隐式调用?

 class Content
            {
public:

 virtual ~Content() = 0;
 virtual explicit operator float&();
 virtual explicit operator long long&();
 virtual explicit operator std::string&()
}
Run Code Online (Sandbox Code Playgroud)

c++ explicit operator-keyword c++11

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

如何在 Android/Kotlin 库模块中启用显式 API 模式?

我使用 Android 4.0.1 和 Kotlin 1.4.10。我试图插入:

kotlin {
   explicitApi()
}
Run Code Online (Sandbox Code Playgroud)

在模块 build.gradle 文件的顶层,但 Android Studio 似乎忽略了它。

我试图在块中插入相同的android { ... }块,但 Android Studio 似乎忽略了它。

我试图插入explicitApi()android.kotlinOptions { ... }块,但摇篮工程同步失败。

api explicit android-library kotlin android-studio

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