public class A {
public Par mParams;
public Par Parameters {
get { return mParams; }
set { mParams = value; }
}
}
我是c#
的新手什么是public Par Parameters
?这似乎既不是阶级也不是功能。在这里感到困惑。
答案 0 :(得分:9)
将其想象为Java中的public Par getParameters()
和public void setX(Par p)
方法。因此,它最接近“函数”,但它实际上称为属性。您可以像这样使用它:
A myObject = new A();
a.Parameters = new Par(...);
这是一个由公共字段支持的属性,在这种情况下,它有点多余,mParms应声明为protected
或private
。
我建议您在“属性”上查看此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)
Parameters
是Par
类型的Property。它有access modifier(public
),这意味着可以从代码中的任何位置访问它。
您的示例有点多余,因为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; }
}
这实际上是相同的,但没有自动实现的属性。
在不支持属性的语言中,所有这些都可以通过创建两个methods:GetParameters
和SetParameters
来实现。实际上,C#编译器在后台生成一些非常类似的命名方法。
答案 5 :(得分:1)
它是一个property,它的工作方式非常类似于一对方法(函数),其唯一目的是让您访问mParams
字段。作为syntactic sugar的一点,C#使您能够像变量一样分配和读取它。可以将其视为两种方法getParameters
和setParameters
,无法直接调用,但在访问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();
这允许您使用更短,更方便和更具表现力的类似于变量的语法,但您实际上正在执行的是运行由编译器创建的两个“不可见”方法。