如何在C#中创建一个可以像字符串一样初始化的类?
我希望能够像初始化字符串一样初始化类:如何在C#中创建一个可以像字符串一样初始化的类?,c#,.net,C#,.net,我希望能够像初始化字符串一样初始化类: string str = "hello"; MyClass class = "hello"; 我真的不知道到底是什么string str=“hello”可以。我假设“hello”被编译器翻译成新的System.String(“hello”)但我不确定。也许这是不可能的,也许我错过了一些非常基本的东西;如果是这样的话,请原谅我的无知:)。我试图创建一个类,它的工作方式与字符串类似,但会自动将字符串存储在文件中 好的,这是我读了你的答案后的代码: class
string str = "hello";
MyClass class = "hello";
我真的不知道到底是什么string str=“hello”代码>可以。我假设“hello”
被编译器翻译成新的System.String(“hello”)代码>但我不确定。也许这是不可能的,也许我错过了一些非常基本的东西;如果是这样的话,请原谅我的无知:)。我试图创建一个类,它的工作方式与字符串类似,但会自动将字符串存储在文件中
好的,这是我读了你的答案后的代码:
class StringOnFile
{
private static string Extension = ".htm";
private string _FullPath;
public bool Preserve = false;
public string FullPath
{
get
{
return _FullPath;
}
}
public static implicit operator StringOnFile(string value)
{
StringOnFile This = new StringOnFile();
int path = 0;
do{
path++;
This._FullPath = Path.GetFullPath(path.ToString() + Extension);
}
while(File.Exists(This._FullPath));
using (StreamWriter sw = File.CreateText(This._FullPath))
{
sw.Write(value);
}
return This;
}
public static implicit operator string(StringOnFile stringOnFile)
{
using (StreamReader sr = File.OpenText(stringOnFile._FullPath))
{
return sr.ReadToEnd();
}
}
~StringOnFile()
{
if(!Preserve) File.Delete(FullPath);
}
}
你认为呢?你需要实现从字符串到类型的隐式转换。。。但我个人很少这样做。类的一个例子是从LINQ到XML的XNamespace
。你的类真的只有一个字符串成员吗?如果是的话,也许它是合适的。或者它可能只有一个字符串和一些其他字段,通常可以默认。。。但在大多数情况下,我并不认为从string
转换是合适的
换句话说:你的用户真的应该把你的类看作一个字符串吗?它实际上是字符串的包装器吗?如果你能给我们更多的细节,我们可以提供更多的建议
不,编译器不会将“hello”翻译成新的System.String(“hello”)
——当然,这只会导致递归问题以及中断interning。IL直接支持C#编译器使用的字符串常量
class MyClass {
public static implicit operator MyClass(string value) {
// Custom logic here
return new MyClass();
}
}
void Example() {
MyClass v1 = "data";
}
这将得到你想要的最终结果。不过,我反对这种做法。隐式转换最终会遇到几个陷阱。最好是有一个构造函数,它接受字符串
哦,顺便问一下,有没有办法把代码放在一个非代码的句子中(我现在谈论的是这个论坛)(就像我的问题中“我假设”hello“被翻译了…”句子中的代码“hello”一样)颜色是否与我问题中的两行代码一样?“我假设编译器将“hello”
转换为新的系统。字符串(“hello”)
”--不,字符串文本以非常低的级别内置到.NET运行时中“hello”
对应于IL中的ldstr“hello”
指令。因此我们可以说string类具有到ldstr的隐式转换(我假设这是指向包含字符串的memeory块的指针)?我只是想弄明白。想知道一般规则是什么,除非string str=“somthing”没有一般规则代码>和编译器在这种情况下所做的,它只在这种情况下做。或者是一个静态方法,当然-关于字符串的预期含义,哪一个可以提供更多信息:FromName
等。这也允许使用具有相同参数但含义不同的多个方法。+1最后的建议是:最好有一个接受字符串的构造函数,但只在语义上有意义时使用它,即。,字符串应该是构造对象所需的重要部分。