这段代码在c#中做了什么,它的目的是什么?

时间:2011-07-21 21:58:58

标签: c# .net properties

 public class A {
    public Par mParams;
    public Par Parameters {
        get { return mParams; }
        set { mParams = value; }
    }
}

我是c#

的新手

什么是public Par Parameters?这似乎既不是阶级也不是功能。在这里感到困惑。

6 个答案:

答案 0 :(得分:9)

将其想象为Java中的public Par getParameters()public void setX(Par p)方法。因此,它最接近“函数”,但它实际上称为属性。您可以像这样使用它:

A myObject = new A();
a.Parameters = new Par(...);

这是一个由公共字段支持的属性,在这种情况下,它有点多余,mParms应声明为protectedprivate

我建议您在“属性”上查看此MSDN Programming Guide。它很好地解释了它们的工作原理以及它们的用途。

答案 1 :(得分:3)

Public Par Parameters的代码块是属性

我怀疑行public Par mParams;实际上应该是私有的。它意味着是存储属性值的基础变量。

值得指出的是,在C#中你不再明确需要mParams。您可以定义一个自动属性,编译器使用以下命令创建自己的底层私有变量:

Public Par Parameters { get; set; }

答案 2 :(得分:2)

public Par Parameters是一个属性,用于设置或获取mParams的值。

答案 3 :(得分:2)

它是访问者和变异者的简写。在另一个例子中:

private int i = 0;
public int myNumber {
    get { return i; }
    set { i = value; }
}

允许您更改变量i。就像在代码中一样:

className.myNumber = 20;
// className.i is now 20

答案 4 :(得分:2)

ParametersPar类型的Property。它有access modifierpublic),这意味着可以从代码中的任何位置访问它。

您的示例有点多余,因为mParams field实际上是公共可访问的,除了返回和设置字段之外,公开它的属性不会执行任何操作。但是,您可能会在每个“访问器”(get和set位)中添加额外的代码。例如,要进行验证,请通知某个属性已更改的内容,等等。

您使用的属性与字段的方式非常相似:

A foo = new A();

// Calls the "get" accessor of the Parameters property
if (foo.Parameters == null)
{
    // Calls the "set" accessor of the Parameters property
    foo.Parameters = new Par();
}

最佳做法是不允许从类外部直接访问成员字段(变量)。因此,在典型情况下,该字段应该是私有的(或有时受保护的):

private Par mParams;

public Par Parameters
{
    get { return mParams; }
    set { mParams = value; }
}

您还需要了解一些稍微不同的语法。首先,有auto-implemented property

public Par Parameters
{
    get;
    set;
}

对于自动实现的属性,C#编译器会自动为您生成一个支持字段。如果我们的属性getter和setter不需要包含任何逻辑,这将使您免于编写一些代码。

您还可以使用属性来限制使用字段无法实现的访问权限:

public Par Parameters
{
    get;
    private set;
}

请注意set“访问者”拥有自己的访问修饰符。结果是一个公开可读的属性,但只允许类本身设置它。这类似于:

private Par mParams;

public Par Parameters
{
    get { return mParams; }
}

这实际上是相同的,但没有自动实现的属性。

在不支持属性的语言中,所有这些都可以通过创建两个methodsGetParametersSetParameters来实现。实际上,C#编译器在后台生成一些非常类似的命名方法。

答案 5 :(得分:1)

它是一个property,它的工作方式非常类似于一对方法(函数),其唯一目的是让您访问mParams字段。作为syntactic sugar的一点,C#使您能够像变量一样分配和读取它。可以将其视为两种方法getParameterssetParameters无法直接调用,但在访问Parameters时会调用这些方法。

Parameters = new Par(); //Works as though you had run: setParameters(new Par());
Par x = Parameters;     //Works as though you had run: Par x = getParameters();

这允许您使用更短,更方便和更具表现力的类似于变量的语法,但您实际上正在执行的是运行由编译器创建的两个“不可见”方法。