首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C#中是否可能/希望避免对象上的新内容

在C#中是否可能/希望避免对象上的新内容
EN

Stack Overflow用户
提问于 2015-03-20 21:15:25
回答 1查看 77关注 0票数 0

我有一节课

代码语言:javascript
复制
public class AClass
{
    private integer x,y,z;
    public AClass()
    {
        Initialize x,y,z;
    }
    public AClass RetB(integer x, AClass C)
    {
        AClass B;
        B = new AClass();
        B = dosomething(x, C);
        return B;
    }
}

如果我想使用RetB(y,C),我可以在main-method中这样做:

代码语言:javascript
复制
AClass MyB;
MyB = new Aclass();
MyB = RetB(2, CC);

但是这样构造函数会被调用两次,一次是针对MyB,另一次是在RetB中。这对于C#来说是自然的吗,还是有可能/需要避免呢?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2015-03-20 21:46:06

返回新对象的静态方法是一种非常常见的模式。例如,它们在.NET库中用于各种int.Parse (通常用于解析)(以及大量其他功能)。正如你所说的,当直接使用构造函数的重载不能准确地传输正在发生的事情时,就会使用它们。

代码语言:javascript
复制
public class AClass
{
    private int x, y, z;

    public static readonly AClass Empty = new AClass();

    // So that you can't do a new AClass() outside of this class
    private AClass()
    {
    }

    public static AClass RetB(int x, AClass c)
    {
        AClass b;
        b = new AClass();
        b.x = x;

        if (c != null)
        {
            b.y = c.y;
            b.z = c.z;
        }
        return b;
    }
}

使用:

代码语言:javascript
复制
AClass myA = AClass.RetB(1, null);
AClass myB = AClass.RetB(0, myB);

注意,作为构造函数private,它是非法的

代码语言:javascript
复制
AClass myC = new AClass(); // doesn't compile
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29167388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档