相关疑难解决方法(0)

为什么struct不能有无参数构造函数

为什么struct不能有无参数构造函数?为CLR做这件事有什么问题?为什么不允许这样做?请解释一下,因为我不明白.

c#

13
推荐指数
1
解决办法
2万
查看次数

为什么记录上不允许无参数构造函数?

以下声明:

type
  TRec = record
    constructor Create;
  end;
Run Code Online (Sandbox Code Playgroud)

产生此编译错误:

E2394记录类型不允许使用无参数构造函数

文档相当无益地说明:

没有更多信息可用于此错误或警告.

我的问题是为什么语言是这样设计的.这样做是否纯粹是为了回应C#结构的类似限制

语种导游这样说:

使用默认的无参数构造函数自动构造记录,但必须显式构造类.由于记录具有默认的无参数构造函数,因此任何用户定义的记录构造函数都必须具有一个或多个参数.

但这没有多大意义.如果记录有默认构造函数,则无法通过RTTI找到它.即使有,为什么这意味着不可能添加另一个呢?您可以为课程这样做.

也许理由是,如果允许我们定义自己的无参数构造函数,我们希望编译器自动调用它们.

注意:我知道您可以使用无参数静态类函数作为变通方法.实际上,我个人总是喜欢使用静态类函数而不是记录构造函数.但这不是问题的关键.我真正想知道的是为什么不允许在记录类型上使用无参数构造函数.

delphi

12
推荐指数
1
解决办法
741
查看次数

C# - 如何确保我的所有结构都已初始化?

我正在用C#编写一个应用程序,它将进行大量计算.一切都围绕着基本的结构 - 价值.它基本上是一些额外的参数(精度等)的两倍.它必须是一个结构,因为将创建太多的它们来提供堆分配.现在,我需要确保它们都已正确初始化.我不能声明默认的显式构造函数,虽然我提供了默认构造函数,它使用0初始化所有内容,这在我的域中没有意义.

并且没有办法拒绝创建一个实例而不用参数调用我的构造函数...?

基本上我需要的是这个测试通过:

[Test]
public void HowDoesThisStructureInitializeByDefault()
{
   Value v = new Value(); - if this did not compile - it would have been ok!

   Assert.AreEqual(0, v.Val); - passes
   Assert.AreEqual(-1, v.Accuracy); - fails
}
Run Code Online (Sandbox Code Playgroud)

如果没有显式调用构造函数并且仍然访问结构,则抛出异常是可以的,但是检查所有时间都需要花费太多时间.

我现在几乎失去了希望,请帮忙!

c# struct value-type

6
推荐指数
1
解决办法
2783
查看次数

为什么我们不能使用GetConstructor找到Int32的默认构造函数?

在C#中我们可以这样做:

Int32 i = new Int32();
Run Code Online (Sandbox Code Playgroud)

但是,以下内容将返回null:

typeof(Int32).GetConstructor(new Type[0])
Run Code Online (Sandbox Code Playgroud)

为什么是这样?

我检查了文档,没有找到解决这个问题的原因.

我的结果可以在下面的代码中说明:

using System;

public class Program
{
    public static void Main()
    {
        Int32 i = new Int32();
        Console.WriteLine(i);
        Console.WriteLine(typeof(Int32).GetConstructor(new Type[0]) == null);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出是:

0

真正

c# reflection

6
推荐指数
1
解决办法
917
查看次数

使用默认参数而不是默认构造函数调用构造函数

我想调用一个结构的构造函数,它具有所有参数的默认值。但是当我调用 MyRectangle 的无参数构造函数时,会调用一个未定义的构造函数。这是为什么?是否可以不调用 not 从我创建的构造函数?

using System;

namespace UebungClasses
{
    class Program
    {
        static void Main(string[] args)
        {
            MyRectangle sixRec = new MyRectangle(3, 2);
            MyRectangle oneRec = new MyRectangle();

            Console.WriteLine("area of six: " + sixRec.Area() + " area of one: " + oneRec.Area());
        }
    }

    public struct MyRectangle
    { 
        public MyRectangle(double w = 1, double l = 1)
        {
            width = w;
            length = l;
            Console.WriteLine("Width: " + width + " Lenght: " + length);
        }

        public double Area()
        { …
Run Code Online (Sandbox Code Playgroud)

c# struct

6
推荐指数
1
解决办法
382
查看次数

为什么我不能在结构中初始化我的字段?

我很惊讶我无法在结构中初始化我的字段,为什么会这样?喜欢:

struct MyStruct
{
    private int a = 90;
}
Run Code Online (Sandbox Code Playgroud)

但这是一个complie时间错误.我不知道为什么这是一个问题?请向我解释一下.

c#

4
推荐指数
2
解决办法
1321
查看次数

如何在VB.net中检索给定结构的默认值?

如果我执行以下语句:

dim defaultDate as Date = Nothing
Run Code Online (Sandbox Code Playgroud)

defaultDate包含Date结构的默认值

我怀疑有一种干净的方式来检索这个值,就像某种buitin常数,但我无法找到它.

问:在VB.net中检索给定结构的默认值的干净方法是什么?

vb.net

4
推荐指数
1
解决办法
714
查看次数

Struct隐式默认构造函数与无参数构造函数

好的,我们听说struct不能有一个默认的无参数构造函数,这很好(http://stackoverflow.com/questions/333829/why-cant-i-define-a-default-constructor-for-a-struct-in-net ).但文档说"每个值类型都有一个隐式默认构造函数,用于初始化该类型的默认值." 来自http://msdn.microsoft.com/en-us/library/s1ax56ch.aspx

现在隐式默认构造函数和无参数默认构造函数之间有什么区别?

.net c#

4
推荐指数
1
解决办法
1114
查看次数

CS8983 具有字段初始值设定项的“结构”必须包含显式声明的构造函数

struct vvvv 
{
    public int j = 8;

    //public vvvv() { } error    
}

class cccc 
{
    public int f = 8;
}
Run Code Online (Sandbox Code Playgroud)

在结构中,如果我注释掉构造函数,编译器会告诉我,j在指定显式构造函数之前,该字段不会被初始化,而在类的情况下,初始化程序将在隐式构造函数的主体运行之前完美运行。

我的意思是该结构还有一个隐式构造函数。为什么我必须指定一个显式的初始化程序才能运行?隐式构造函数还不够吗?

c# struct c#-10.0

4
推荐指数
1
解决办法
2428
查看次数

尽管覆盖了结构默认构造函数,但仍会使用它

我有以下代码:

struct Person
    {
        public readonly int x;

        public Person( int x )
        {
            this.x = x;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Person p = new Person();
            Console.Write(p.x);
        } 
    }
Run Code Online (Sandbox Code Playgroud)

这段代码运行良好。为什么?覆盖默认构造函数没有应用于 structs 吗?使用参数化构造函数是否覆盖默认构造函数?

c# struct

3
推荐指数
1
解决办法
1649
查看次数

结尾带有`this()` 的结构构造函数和没有结尾的结构构造函数有什么区别?

假设我们有这两个结构......

public struct Example
{
    public int Number { get; set; }

    public Example(int Number)
    {
        Number = number;
    }
}
Run Code Online (Sandbox Code Playgroud)

和:

public struct Example
{
    public int Number { get; set; }

    public Example(int number) : this()
    {
        Number = number;
    }
}
Run Code Online (Sandbox Code Playgroud)

你可以看到有一个结构体,**this()**最后有一个构造函数,另一个没有。

两者有什么区别?

c# constructor struct

3
推荐指数
1
解决办法
190
查看次数

如何打印n次n没有循环,递归或转到C#

我在c ++中使用此代码来执行此操作,但我想在C#中执行相同的操作,但它无法正常工作,我无法弄明白为什么?

    class Numero
{
   public:
   static int num;
   Numero()
   {
       cout<<num++<<" ";
   }
};

int Numero::num=1;

int main()
{
   int n;
   cout<<"Type n: ";
   cin>>n;
   Numero obj[n];
   return 0;

}
Run Code Online (Sandbox Code Playgroud)

这个印刷品"1 2 3 4 5 .... n"但在C#中

class numero
    {
        public static int num {get; set;}
        public numero()
        {
            Console.WriteLine(num);
            num++;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            numero.num=1;
            Console.WriteLine("Type 'n'");
            int n = int.Parse( Console.ReadLine());
            Console.WriteLine("Printing to: {0}", n);
            numero[] num_1 = new numero[n]; 
            Console.WriteLine("End"); …
Run Code Online (Sandbox Code Playgroud)

c# c++ constructor

1
推荐指数
1
解决办法
161
查看次数

如何在结构中调用静态无参数构造函数?

struct TestStruct
{        
    static TestStruct()
    {
        Console.WriteLine("TestStruct");
    }
}
Run Code Online (Sandbox Code Playgroud)

在结构中调用静态无参数构造函数时.

c# struct

0
推荐指数
1
解决办法
114
查看次数

标签 统计

c# ×11

struct ×6

constructor ×2

.net ×1

c#-10.0 ×1

c++ ×1

delphi ×1

reflection ×1

value-type ×1

vb.net ×1