2010-05-21 58 views
2

不知道这个问题的措辞是准确的,但这里是我想要做的:我要与数据绑定一些字符串一类是:如何提供属性级别的字符串格式?

class MyClass 
{ 
    public string MyProperty { get; set; } 
    public string MyProperty2 { get; set; } 
} 

绑定时,一切都将正常运行。在后端,我正在写一个文件,并且我希望MyProperty2始终使用某种加密算法进行加密。我希望我的后端代码编写每个字符串,而不需要知道需要加密(我希望类能够知道它应该被加密,而不是消费者)。我可以用类型转换器或类似的东西来做到这一点吗?

编辑:还有其他的情况。一些我想格式化为“Y”或“N”的布尔值,我想格式化为“Enabled”/“Disabled”等的其他布尔值。我可以编写(并写入)辅助方法,并让文件编写器调用辅助方法根据需要,我只是想知道如果没有文件编写者需要知道哪些对象需要哪种格式并让对象将其告诉文件编写者,是否有办法做到这一点。

回答

0

我不知道你想实现什么,但你可以使用一个加密的私人支持字段,然后解密/加密在属性settor。写入文件时,写入后台字段,而不是属性。

private string encryptedProperty2; 
public string MyProperty2 
{ 
     get { return this.Decrypt(this.encryptedProperty2); } 
     set { this.encryptedProperty2 = this.Encrypt(value); } 
} 

private void Init() 
{ 
    ... 
    this.encryptedProperty2 = ... read from file ... 
    ... 
} 

public void Save() 
{ 
     ... 
     writer.Write(this.encryptedProperty2); 
     ... 
} 

或者,您可以在读取/写入文件时进行加密。但是,如果它很敏感,则可能需要将其保存在内存中。

+0

我喜欢这个想法。唯一的缺点是可能会进行大量转换,当我真的想要一种方式(通过属性或某物)来标记具有本质上是ToString覆盖的属性时。当然,使用已经是字符串的类型时,这会变得更加棘手......但是这种方法可以解决这个问题。 – 2010-05-21 14:43:06

0

您可以在MyClass中创建一个private function来执行所需的加密。然后在获取方法MyProperty2中调用私有函数。

E.g.

public string MyProperty2 
{ 
    get { return DoEncrypt(myProperty2);} 
    set; 
} 
+0

虽然不会影响数据绑定吗?在UI中,我将MyClass绑定到某个WPF页面,并且我不希望在那里发生加密。 – 2010-05-21 14:19:58

相关问题