类情侣(设计)
本文关键字:设计 情侣 | 更新日期: 2023-09-27 18:16:03
我正在学习C#。好的,我有个问题:我有一个班:
class Couple{
private double first{private set; public get;}
private double second{private set; public get;}
}
第一个问题:我说得对吗,这些属性有公共获取者和私人设置者?(我知道,这听起来很奇怪,但需要知道私有/公共字段和具有公共/私有集/get的私有/公共属性之间的区别(
第二个问题。
如果我想上课:
class AnyCouple{
public Type AnyCouple {public set; public get;}
private AnyCouple first{private set; public get;}
private AnyCouple second{private set; public get;}
}
如何制作?伪问题,我知道,对不起
您想要的类是Tuple。
至于一般原则,你需要泛型。
关于属性,可以将不同的访问修饰符应用于其中一个访问者,但不能同时应用于两个访问者(未应用修饰符的访问者使用应用于属性本身的修饰符(。而且应用的修饰语必须更严格,而不是更宽松:
private double first {private set; public get;} // wrong, 2 modifiers
private double first { set; public get;} // wrong, a relaxed modifier
public double first {get; private set;} // correct
MSDN上一篇关于这方面的好文章。
对于你的第一个问题,是的,你是对的。属性first
和second
具有一个私有setter和一个公共getter。然而,正如编写的那样,您的代码不会编译。如果在getter或setter上指定访问修饰符,则它必须比该属性的访问修饰符更具限制性,并且不能在这两个属性上都指定访问修饰符。此外,请注意,在惯用C#中,我们首先编写getter,其次编写setter,并为属性提供PascalCase名称,如
public double First { get; private set; }
这将使用public
getter和private
setter实现一个名为First
的属性,并且它是按惯例编写的。
对于第二个问题,您应该使用泛型。你可以这样做:
public class MyTuple<T1, T2> {
private readonly T1 first;
public T1 First { get { return this.first; } }
private readonly T2 second;
public T2 Second { get { return this.second; } }
public MyTuple(T1 first, T2 second) {
this.first = first;
this.second = second;
}
}
但是,这已经内置在.NET框架中了。您可以使用Tuple<T1, T2>
。请注意,它的Item1
和Item2
属性(类似于您的first
和second
(具有公共getter;它由CCD_ 11字段支持。
对于第一个问题,private double first
意味着getter和setter都是私有的。确实需要public double first
,然后像您所做的那样控制getter和setter的可访问性。我相信,当编译器看到这种属性声明时,它会为后台存储(始终是一个私有字段(创建代码,并根据您的指定获取/ssetter。
正如@GSerg所提到的,Tuple类就是您想要的。