İngilizce dilinde oku

Aracılığıyla paylaş


ValueType Sınıf

Tanım

Değer türleri için temel sınıfı sağlar.

C#
public abstract class ValueType
C#
[System.Serializable]
public abstract class ValueType
C#
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class ValueType
Devralma
ValueType
Türetilmiş
Öznitelikler

Açıklamalar

ValueType, Object sanal yöntemlerini, değer türleri için daha uygun uygulamalarla geçersiz kılar. Ayrıca bkz. ValueTypedevralan Enum.

Veri türleri değer türlerine ve başvuru türlerine ayrılır. Değer türleri, bir yapıda yığına ayrılmış veya satır içi olarak ayrılmıştır. Başvuru türleri yığın olarak ayrılır. Hem başvuru hem de değer türleri, Objectnihai temel sınıfından türetilir. Bir değer türünün nesne gibi davranmasının gerekli olduğu durumlarda, değer türünün yığında bir başvuru nesnesi ayrılmış gibi görünmesini sağlayan bir sarmalayıcı ve değer türünün değeri buna kopyalanır. Sarmalayıcı, sistemin bir değer türü içerdiğini bilmesi için işaretlenir. Bu işlem kutulama olarak bilinir ve ters işlem de kutulama olarak bilinir. Kutulama ve kutulama, herhangi bir türün nesne olarak ele alınmasına izin verir.

ValueType değer türleri için örtük temel sınıf olsa da, doğrudan ValueType devralan bir sınıf oluşturamazsınız. Bunun yerine, tek tek derleyiciler değer türlerinin oluşturulmasını desteklemek için bir dil anahtar sözcüğü veya yapısı (C# dilinde struct ve Visual Basic'te Structure...End Structure) sağlar.

.NET Framework'teki değer türleri için temel sınıf olarak hizmet vermenin yanı sıra, ValueType yapısı genellikle doğrudan kodda kullanılmaz. Ancak, olası bağımsız değişkenleri tüm nesneler yerine değer türleriyle kısıtlamak veya bir yöntemin bir dizi farklı değer türünü işlemesine izin vermek için yöntem çağrılarında parametre olarak kullanılabilir. Aşağıdaki örnekte, ValueType başvuru türlerinin yöntemlere geçirilmesini nasıl önlediği gösterilmektedir. dört yöntem içeren Utility adlı bir sınıf tanımlar: bağımsız değişkeninin sayı olup olmadığını gösteren IsNumeric; bağımsız değişkeninin tamsayı olup olmadığını gösteren IsInteger; bağımsız değişkeninin kayan noktalı sayı olup olmadığını gösteren IsFloat; ve Compare, iki sayısal değer arasındaki ilişkiyi gösterir. Her durumda, yöntem parametreleri ValueTypetüründedir ve başvuru türlerinin yöntemlere geçirilmesi engellenir.

C#
using System;
using System.Numerics;

public class Utility
{
   public enum NumericRelationship {
      GreaterThan = 1, 
      EqualTo = 0,
      LessThan = -1
   };
   
   public static NumericRelationship Compare(ValueType value1, ValueType value2)
   {
      if (! IsNumeric(value1)) 
         throw new ArgumentException("value1 is not a number.");
      else if (! IsNumeric(value2))
         throw new ArgumentException("value2 is not a number.");

      // Use BigInteger as common integral type
      if (IsInteger(value1) && IsInteger(value2)) {
         BigInteger bigint1 = (BigInteger) value1;
         BigInteger bigint2 = (BigInteger) value2;
         return (NumericRelationship) BigInteger.Compare(bigint1, bigint2);
      }
      // At least one value is floating point; use Double.
      else {
         Double dbl1 = 0;
         Double dbl2 = 0;
         try {
            dbl1 = Convert.ToDouble(value1);
         }
         catch (OverflowException) {
            Console.WriteLine("value1 is outside the range of a Double.");
         }
         try {
            dbl2 = Convert.ToDouble(value2);
         }
         catch (OverflowException) {
            Console.WriteLine("value2 is outside the range of a Double.");
         }
         return (NumericRelationship) dbl1.CompareTo(dbl2);
      }
   }
   
   public static bool IsInteger(ValueType value)
   {         
      return (value is SByte || value is Int16 || value is Int32 
              || value is Int64 || value is Byte || value is UInt16  
              || value is UInt32 || value is UInt64 
              || value is BigInteger); 
   }

   public static bool IsFloat(ValueType value) 
   {         
      return (value is float || value is double || value is Decimal);
   }

   public static bool IsNumeric(ValueType value)
   {
      return (value is Byte ||
              value is Int16 ||
              value is Int32 ||
              value is Int64 ||
              value is SByte ||
              value is UInt16 ||
              value is UInt32 ||
              value is UInt64 ||
              value is BigInteger ||
              value is Decimal ||
              value is Double ||
              value is Single);
   }
}

Aşağıdaki örnekte, Utility sınıfının yöntemlerine yapılan çağrılar gösterilmektedir.

C#
public class Example
{
   public static void Main()
   {
      Console.WriteLine(Utility.IsNumeric(12));
      Console.WriteLine(Utility.IsNumeric(true));
      Console.WriteLine(Utility.IsNumeric('c'));
      Console.WriteLine(Utility.IsNumeric(new DateTime(2012, 1, 1)));
      Console.WriteLine(Utility.IsInteger(12.2));
      Console.WriteLine(Utility.IsInteger(123456789));
      Console.WriteLine(Utility.IsFloat(true));
      Console.WriteLine(Utility.IsFloat(12.2));
      Console.WriteLine(Utility.IsFloat(12));
      Console.WriteLine("{0} {1} {2}", 12.1, Utility.Compare(12.1, 12), 12);
   }
}
// The example displays the following output:
//       True
//       False
//       False
//       False
//       False
//       True
//       False
//       True
//       False
//       12.1 GreaterThan 12

Oluşturucular

ValueType()

ValueType sınıfının yeni bir örneğini başlatır.

Yöntemler

Equals(Object)

Bu örneğin ve belirtilen nesnenin eşit olup olmadığını gösterir.

GetHashCode()

Bu örneğin karma kodunu döndürür.

GetType()

Geçerli örneğin Type alır.

(Devralındığı yer: Object)
MemberwiseClone()

Geçerli Objectbasit bir kopyasını oluşturur.

(Devralındığı yer: Object)
ToString()

Bu örneğin tam tür adını döndürür.

Şunlara uygulanır

Ürün Sürümler
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Ayrıca bkz.