可以编写这样的类吗?
public class AlexaApi
{
public string CreateRandomPhrase()
{
return "Hello World" //There's more code, but needless for my question
}
public object ResponseBuilder(string text)
{
//CODE HERE
}
}
但是当我使用该类时,每次我想访问其功能时都调用“ new”。
new AlexaApi().ResponseBuilder(new AlexaApi().CreateRandomPhrase());
我知道这会创建两个AlexaApi对象的实例,很可能应该这样写:
var alexa = new AlexaApi();
alexa.ResponseBuilder(alexa.CreateRandomPhrase());
每次调用“ new”会消耗更多的内存吗?可能发生的最坏的事情是什么?做第一个示例中写的内容真的很糟糕吗?
答案 0 :(得分:2)
您实际上想要的是一种static
方法:
public class AlexaApi
{
public static string CreateRandomPhrase()
{
return "Hello World" //There's more code, but needless for my question
}
public static object ResponseBuilder(string text)
{
//CODE HERE
}
}
然后您可以这样调用这些方法:
AlexaApi.CreateRandomPhrase();
..etc.
即您可以避免每次都开设新课程。
但是请注意,static
方法和类的含义与没有static
的方法和类略有不同。特别是
您不会显示此类的详细信息,因此很难明确。如果您的方法只是“逻辑”,那么将它们设为静态不会有任何危害。如果他们加载资源等,那么就不会。
有关更多信息,请参见Static vs non-static class members
还请注意,仅包含static
方法的类本身可以制成static
。这只是防止您声明无静态方法/属性
public static class AlexaApi
{
public static string CreateRandomPhrase()
{
return "Hello World" //There's more code, but needless for my question
}
public static object ResponseBuilder(string text)
{
//CODE HERE
}
}
答案 1 :(得分:0)
要执行所有这些操作而不创建多个实例,您应该按照建议使用静态方法。考虑以下代码:
public class AlexaApi
{
public static string CreateRandomPhrase()
{
return "Hello World" //There's more code, but needless for my question
}
public static object ResponseBuilder(string text)
{
//CODE HERE
}
}
这样,您可以使用以下代码获得相同的结果:
AlexaApi.ResponseBuilder(AlexaApi.CreateRandomPhrase());
答案 2 :(得分:0)
keyword static
应该适合您的情况:
public class AlexaApi
{
public static string CreateRandomPhrase()
{
return "Hello World" //There's more code, but needless for my question
}
public static object ResponseBuilder(string text)
{
//CODE HERE
}
}
并直接调用该方法,而无需创建实例:
AlexaApi.ResponseBuilder(AlexaApi.CreateRandomPhrase());
答案 3 :(得分:0)
正如您在问题中提到的那样,每次使用类的新实例将占用更多内存。根据调用此方法的范围和类的大小(多少个实例变量,而不是代码行),这实际上几乎不占用额外的内存(存储该类额外实例的内存)或CPU时间(使用现有的默认值/构造函数创建类)消耗的内存比程序其余部分的总和还多。
正如评论中提到的那样,以及在我键入此内容时发布的答案,您始终可以创建这些方法static
,这意味着可以完全不使用类的实例来调用它们,这将节省您的时间麻烦。