这段代码在c#中是做什么的,它的目的是什么?
本文关键字:什么 是什么 段代码 代码 | 更新日期: 2023-09-27 18:03:09
public class A {
public Par mParams;
public Par Parameters {
get { return mParams; }
set { mParams = value; }
}
}
我是c#新手
public Par Parameters
是什么?这看起来既不是类也不是函数。困惑。
把它想象成Java中的public Par getParameters()
和public void setX(Par p)
方法。所以,它是最接近"函数",但它实际上被称为属性。你可以这样使用:
A myObject = new A();
a.Parameters = new Par(...);
这是一个由公共字段支持的属性,在这种情况下,它有些多余,应该将mParms声明为protected
或private
。
我建议您查看此MSDN属性编程指南。它很好地解释了它们是如何工作的以及它们的用途。
Public Par Parameters
的代码块是一个属性
我怀疑public Par mParams;
行实际上应该是私有的。它是存储属性值的底层变量。
值得指出的是,在c#中不再显式地需要mParams。您可以定义一个自动属性,其中编译器使用
创建它自己的底层私有变量:Public Par Parameters { get; set; }
public Par Parameters
是一个属性,用于设置或获取mParams的值。
Parameters
是类型为Par
的属性。它有一个访问修饰符(public
),这意味着它可以从代码中的任何地方访问。
您的示例有点多余,因为mParams字段实际上是可公开访问的,并且公开它的属性除了返回和设置字段之外没有做任何事情。但是,您可能会在每个"访问器"(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; }
}
还需要学习一些略有不同的语法。首先是自动实现的属性:
public Par Parameters
{
get;
set;
}
对于自动实现的属性,c#编译器会自动为你生成一个支持字段。如果我们的属性getter和setter不需要包含任何逻辑,这将节省您编写一些代码。
您还可以使用属性来限制访问,这是使用字段无法实现的:
public Par Parameters
{
get;
private set;
}
注意set
"accessor"有它自己的访问修饰符。结果是一个公开可读的属性,但只允许类本身设置它。这类似于:
private Par mParams;
public Par Parameters
{
get { return mParams; }
}
可以有效地做同样的事情,但是没有自动实现的属性。
在不支持属性的语言中,所有这些都可以通过创建两个方法来实现:GetParameters
和SetParameters
。事实上,c#编译器会在后台生成一些非常相似的命名方法。
这是存取器和变异器的简写。在另一个例子中:
private int i = 0;
public int myNumber {
get { return i; }
set { i = value; }
}
允许您更改变量i
。如下代码所示:
className.myNumber = 20;
// className.i is now 20
这是一个属性,它的工作方式非常像一对方法(函数),其唯一目的是让您访问mParams
字段。作为语法糖,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();
这允许你使用更短、更方便、更有表现力的类似变量的语法,但你实际上在做的是运行编译器创建的两个"不可见"的方法。