类情侣(设计)

本文关键字:设计 情侣 | 更新日期: 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上一篇关于这方面的好文章。

对于你的第一个问题,是的,你是对的。属性firstsecond具有一个私有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>。请注意,它的Item1Item2属性(类似于您的firstsecond(具有公共getter;它由CCD_ 11字段支持。

对于第一个问题,private double first意味着getter和setter都是私有的。确实需要public double first,然后像您所做的那样控制getter和setter的可访问性。我相信,当编译器看到这种属性声明时,它会为后台存储(始终是一个私有字段(创建代码,并根据您的指定获取/ssetter。

正如@GSerg所提到的,Tuple类就是您想要的。