Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# net字符串类是如何工作的_C#_String_Function_Class_Methods - Fatal编程技术网

C# net字符串类是如何工作的

C# net字符串类是如何工作的,c#,string,function,class,methods,C#,String,Function,Class,Methods,使用string类,我们可以像这样一个接一个地调用方法: originalString.TrimStart().TrimEnd().Replace("Hello","Hi") 我想知道它是怎么工作的?以及这种操作在.net framework中的调用 如果你能给我一个创建这样一个类的例子,我将不胜感激 谢谢,此方法中的每一个都返回新字符串,因此基本上这是在字符串返回字符串时调用的方法。您可以创建自己的类,创建方法并像这样运行它 非常重要的是要注意字符串是不可变的,所以调用例如Trim on s

使用string类,我们可以像这样一个接一个地调用方法:

originalString.TrimStart().TrimEnd().Replace("Hello","Hi")
我想知道它是怎么工作的?以及这种操作在.net framework中的调用

如果你能给我一个创建这样一个类的例子,我将不胜感激


谢谢,

此方法中的每一个都返回新字符串,因此基本上这是在字符串返回字符串时调用的方法。您可以创建自己的类,创建方法并像这样运行它

非常重要的是要注意字符串是不可变的,所以调用例如Trim on string不会改变它

public string Trim()
{
  return this.TrimHelper(2);
}
这就是修剪看起来的样子,没有魔法,只是简单的方法

若你们的类不是不可变的,最好的方法就是为你们的类创建扩展方法。您可以阅读更多关于扩展方法的信息

使用常规方法的示例

并使用它:

var test = new Test();
test.DoStuff().DoOtherStuff();

很简单。String是一个不可变的类。这意味着,您对其执行的每个转换其值的操作都需要返回一个新的、不同的String实例,因为当前实例无法更改。你可以调用另一个操作等等

string newString = originalString.Replace("Hello","Hi") // new instance
int length = newString.Length // a simple property.

这没什么特别的。string类的许多方法都返回字符串,因此您可以对返回的值调用其他方法

例如,TrimStart返回一个新字符串,其中空格在开始时已被删除。然后在返回的字符串上调用TrimEnd


有时这被称为or。

所有上述方法都返回字符串。所以这只是一个典型的问题

您可以像这样创建自己的类-

类定义

方法调用


你所看到的东西背后的原理是调用或是一个流畅的接口

它之所以有效,是因为该方法返回的类型与其包含的类型相同,即TrimStart是String类上的一个函数,并且还返回一个字符串。然而,这并不限于字符串


我能想到的最好的现代例子之一是维基百科文章中提到的jQuery。

只需在每次操作中返回结果,如果结果类型相同,则可以调用result方法,然后调用result方法,等等

public class A
{
    public A SomeMethod();
    ...
}

A.SomeMethod().SomeMethod()...

除了这些不是扩展方法外,它们只是返回一个新字符串@Moo Juice扩展方法可以返回新字符串!扩展方法确实不需要更改值!但是OP给出的示例是string类的成员,而不是扩展方法:@好的,我的错误,纠正了。感谢您注意到,OP正在询问如何创建这样的东西,所以扩展方法将是一个不错的选择。这不一定与不变性有关。您可以在可变类上编写方法链接方法,也可以在不使用方法链接方法的情况下编写不可变类。@Rawling您不能在没有方法链接的情况下编写更改值的不可变类。那是绳子。
public class FooString
    {

        public FooString Test1()
        {
            return this;
        }

        public FooString Test2()
        {
            return this;
        }

        public FooString Test3(string someString)
        {
            return this;
        }

    }
FooString test = new FooString();
test.Test1().Test2().Test3("Some string");
public class A
{
    public A SomeMethod();
    ...
}

A.SomeMethod().SomeMethod()...