不是静态方法,为什么能调用

net学习期 2018-08-14 03:27:16

net这个不是静态方法,为什么不用创建一个类的实例,就可以直接类名.就可以调用呢~
System.String类里面的方法, 有很多不是静态方法, 为什么不用创建一个实例,可以直接String. 这样调用呢
...全文
552 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
游北亮 2018-08-16
  • 打赏
  • 举报
回复
基础不过关,多看看string实现相关的原理

string a = ""; 这里隐式new了一个字符串,
只不过无论是C#还是Java,都对字符串做了可复用的优化
  • 打赏
  • 举报
回复
......,楼主不知道怎么创建string对象吗
圣殿骑士18 2018-08-15
  • 打赏
  • 举报
回复
你的 a.Insert,也不是 string.Insert呀,凭什么说它是静态方法?你多个概念点出现问题,不只是new 的理解有问题。
还是要先整体的学一下c#语法。磨刀不误砍柴工。
闭包客 2018-08-14
  • 打赏
  • 举报
回复
创建实例不一定需要 new 关键字的。

正怒月神 2018-08-14
  • 打赏
  • 举报
回复
你可以自己用 string a = new string(new char[] { }); 测试
正怒月神 2018-08-14
  • 打赏
  • 举报
回复
只是语法上将string a = new string简化成了 string a=........
正怒月神 2018-08-14
  • 打赏
  • 举报
回复
。。。。。
你在想什么呢?
string a="";
这个等同于 string a = new string(new char[] { });
那string 不就是实例化了一个a对象嘛
然后调用自己的内部方法 insert有什么问题???
qq14923349 2018-08-14
  • 打赏
  • 举报
回复
引用 4 楼 weixin_41686965 的回复:
[quote=引用 2 楼 tangyanzhi1111 的回复:]
intern就是个静态方法,insert不是静态方法,也不能直接调用

intern原型 :
[SecuritySafeCritical]
public static String Intern(String str);


insert
public String Insert(int startIndex, String value);


string a = ",插入字符串";

Console.WriteLine(a.Insert(0,"非静态方法不用创建实例,可以调用"));


Console.ReadKey();
请测试,完全不用创建实例,直接就可以用,我就很纳闷,为啥呢[/quote]

这个例子霸气!
FainSheeg 2018-08-14
  • 打赏
  • 举报
回复
看到帖子我还纳闷了,看到举的栗子,恍然大悟,我只是飘过。
吉普赛的歌 2018-08-14
  • 打赏
  • 举报
回复
.net的编译器规定的游戏规则,string是.net的一个基本的数据类型,如果也要协商一个new关键字且不麻烦?给它赋值相当于new了一个新对象。为什么一定要new呢?new 的本质操作是分配一块内存,那么编译器可以认为string 赋值就分配内存存储字符串了。

其实你用=,最终内部还是有 new . 只是 .net 表面上简化了这个行为而已。
net学习期 2018-08-14
  • 打赏
  • 举报
回复
引用 5 楼 wddw1986 的回复:
你的a不是string类型对象的引用是什么?麻烦请先从基础的语法学习起,然后再来讨论这些问题,不然大家不在一个频道上。


创建对象,不应该, string a= new string(); 这样吗
net学习期 2018-08-14
  • 打赏
  • 举报
回复
引用 2 楼 tangyanzhi1111 的回复:
intern就是个静态方法,insert不是静态方法,也不能直接调用

intern原型 :
[SecuritySafeCritical]
public static String Intern(String str);


insert
public String Insert(int startIndex, String value);


string a = ",插入字符串";

Console.WriteLine(a.Insert(0,"非静态方法不用创建实例,可以调用"));


Console.ReadKey();
请测试,完全不用创建实例,直接就可以用,我就很纳闷,为啥呢
cheng2005 2018-08-14
  • 打赏
  • 举报
回复
你的a不是string类型对象的引用是什么?麻烦请先从基础的语法学习起,然后再来讨论这些问题,不然大家不在一个频道上。
江湖评谈 2018-08-14
  • 打赏
  • 举报
回复
intern就是个静态方法,insert不是静态方法,也不能直接调用

intern原型 :
[SecuritySafeCritical]
public static String Intern(String str);


insert
public String Insert(int startIndex, String value);
net学习期 2018-08-14
  • 打赏
  • 举报
回复
引用 1 楼 wddw1986 的回复:
谁告诉你能直接调用String.Insert的?能编译的过?搞笑吧。

using System;

namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{


string a = ",插入字符串";

Console.WriteLine(a.Insert(0,"非静态方法不用创建实例,可以调用"));


Console.ReadKey();

}



}
}

请自己测试~~~~
cheng2005 2018-08-14
  • 打赏
  • 举报
回复
谁告诉你能直接调用String.Insert的?能编译的过?搞笑吧。

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧