1

是否可以标记PasswordBox.SecurePasswordReadOnly

考虑这个简单的代码:

XAML:

<StackPanel>
    <PasswordBox Name="pBox" MinWidth="100" />
    <Button Content="OK" Click="Button_Click" Width="50" />
</StackPanel>

C#:

private void Button_Click(object sender, RoutedEventArgs e)
{
    pBox.SecurePassword.MakeReadOnly();
    Console.WriteLine(pBox.SecurePassword.IsReadOnly());
}

它将输出False. 为什么?

编辑:为了确保,我尝试了这个,它按预期输出“True”。

private void Button_Click(object sender, RoutedEventArgs e)
{
    SecureString s = new SecureString();
    s.MakeReadOnly();
    Console.WriteLine(s.IsReadOnly());
}
4

1 回答 1

1

pBox.SecurePassword每次读取属性时都会返回一个新的安全字符串实例。您可以通过多次调用来验证它GetHashCodepBox.SecurePassword

您还会注意到,使用 Visual Studios 的“生成对象 ID”不会显示 #X,因为每次鼠标悬停时它都会生成一个新实例。

在将对象的引用创建SecureString到局部变量中时,它您调用的实例相同MakeReadOnly(),因此它的行为符合预期。

于 2012-11-20T21:02:06.143 回答