as���Z�q�ƃL���X�g�̈Ⴂ�́H�F.NET TIPS

» 2003�N04��04�� 05��00�� ���J
[�얓���C������Ѓs�[�f�[]
.NET TIPS
Insider.NET


�u.NET TIPS�v�̃C���f�b�N�X

�A�ږڎ�

�@C#�̌���d�l�ɂ́A���2��ނ̃f�[�^�^��ϊ������i���p�ӂ���Ă���B1�‚̓L���X�g���Z�q�i�u()���Z�q�v�j�ŁA����1�‚�as���Z�q�ł���B�ǂ�����g���Ă��A�f�[�^�^��ϊ����邱�Ƃ��ł���B

�@�܂��L���X�g���Z�q�ł͎��̂悤�ɂ��ċL�q����B

object obj = "������";
string str = (string)obj;


�@���̗�ł́Aobject�^�̎Q�Ƃɑ΂��āA“(string)”�Ƃ����\�L���g���āAstring�^�̎Q�Ƃɕϊ����Ă���B

�@����ɑ΂���as���Z�q�ł͎��̂悤�ɋL�q����B

object obj = "������";
string str = obj as string;


�@�����object�^�̎Q�Ƃ�string�^�̎Q�Ƃɕϊ����Ă���Bas���Z�q�ł́A���̎�O�ɕϊ��������Q�Ƃ��A���ɕϊ��������^���L�q����B�L���X�g���Z�q��as���Z�q�̕\�L�́A�܂���������Č����邪�A���ꂼ��̃R�[�h�����s�������ʂ͓������̂ƂȂ�B

�@�Ȃ��A���m�ɂ́A�������object�^�ϐ��ɑ�����Ă���ŏ��̍s���ÖٓI�ȕϊ����s���Ă���Bobject�N���X�͕�����^�̃X�[�p�[�N���X�ł��邽�߁A���̂悤�ȑ���͈ÖٓI�ɍs����B

�ϊ��ł��Ȃ��Ƃ��̋����̑���

�@�L���X�g���Z�q��C����̗�������ޑ����̃v���O��������Ŏg�p�ł��AC#�v���O�����ł����p����Ă���B����ɑ΂��Aas���Z�q���g�p�����\�[�X�E�R�[�h���������邱�Ƃ͑����Ȃ��B�������A�L���X�g���Z�q�Ƃ͕ʂ�as���Z�q�����݂���̂ɂ́A����Ȃ�̗��R������B���҂́A�f�[�^�^��ϊ�����Ƃ����ړI�͎��Ă��邪�A�@�\�̏ڍׂ͓����ł͂Ȃ��B

�@��1�̑���́A�ϊ��ł��Ȃ��Ƃ��̋����̑���ł���B�ȉ��̃T���v���E�v���O����������ƁA���ꂪ�����邾�낤�B

// castandas.cs

using System;

class MyClass {
  public static void Main() {

    object obj = "������";

    MyClass cls1 = obj as MyClass;
    Console.WriteLine(cls1 == null);
    // �o�́FTrue

    try {
      MyClass cls2 = (MyClass)obj;
    } catch(InvalidCastException e) {
      Console.WriteLine(e.ToString());
      // �o�́F
      // System.InvalidCastException: �w�肳�ꂽ�L���X�g�͗L���ł͂���܂���B
      //    at MyClass.Main()
    }
  }
}
// �R���p�C�����@�Fcsc castandas.cs

as�ƃL���X�g�ŕϊ��ł��Ȃ��Ƃ��̈Ⴂ���݂�C#�̃T���v���E�v���O�����icastandas.cs�j
castandas.cs�̃_�E�����[�h

�@�����ł́Astring�^����MyClass�^�ւ́A�{���͕ϊ��s�”\�ȕϊ������s�����Ă���B

�@�v���O�����ł́A�܂��Aas���Z�q�ɂ��ϊ����s���Ă���B���̌��ʁAcls1 == null�̎���True�ƕ\������Ă��邱�Ƃ��番����Ƃ���A�ϊ��ł��Ȃ��Ƃ��ɂ́Aas���Z�q�͌��ʂƂ���null��Ԃ��B����A�L���X�g���Z�q�ɂ��ϊ��ł́AInvalidCastException��O���L���b�`���Ă��邱�Ƃ��番����Ƃ���A�ϊ��ł��Ȃ��ꍇ�ɂ�System.InvalidCastException�Ƃ�����O�𓊂���B

�@�v���O�����̍\���I�ȓs����A�ϊ��ł��Ȃ����Ƃ�null�l�Œ��ׂ�����悢�ꍇ��as���Z�q�̕����g���₷�����낤�B����A��O�œ�������s�����悢�ꍇ�̓L���X�g���Z�q�̕����g���₷�����낤�B

���l�^�ɂ‚��Ă̑���

�@�L���X�g���Z�q�́A�l�^�A�Q�ƌ^���킸�Ɏg�p�ł���B�������Aas���Z�q�́A�Q�ƌ^�ւ̕ϊ��݂̂��s�����Ƃ��ł���i�l�^�A�Q�ƌ^�̏ڍׂɂ‚��Ắu������ C#���� 5-6 �l�^�ƎQ�ƌ^�v���Q�Ɓj�B�‚܂�A���̃R�[�h�͐������R���p�C���ł���B

int i = (int)1;


�@���������̂悤�ɁAas���Z�q�Œl�^��int�^�ւ̕ϊ����s�����Ƃ��Ă���R�[�h�̓R���p�C���ł��Ȃ��B

int i = 1 as int;


�@���̃R�[�h���R���p�C�����悤�Ƃ���ƁA

as �I�y���[�^�͎Q�ƌ^�Ŏg�p���Ă������� ( 'int' �͒l�̌^�ł� )�B


�Ƃ����G���[���N���Ă��܂��Bas���Z�q�̌��ɂ͎Q�ƌ^�̌^�݂̂��L�q�ł���B�L���X�g���Z�q�ɂ͂��̂悤�Ȑ���͑��݂��Ȃ��B

�@�Ȃ��Aas���Z�q�́A�l�^�ւ̕ϊ��͂ł��Ȃ����A�l�^�̒l���{�b�N�X���ɂ���ĎQ�ƌ^�ɕϊ����邱�Ƃ͉”\�ł���B

�����[�U�[��`�̕ϊ��ɂ‚��Ă̑���

�@C#�ł́Aimplicit�L�[���[�h��explicit�L�[���[�h���g�p���āA�ÖٓI���邢�͖����I�ȃ��[�U�[��`�ϊ����L�q���邱�Ƃ��ł���i���[�U�[��`�ϊ��ɂ‚��Ắu������ C#���� Column�@- ���[�U�[��`�̃f�[�^�^�ϊ� -�v���Q�Ɓj�B�L���X�g���Z�q��p���āA���̃��[�U�[��`�ϊ������s�����邱�Ƃ��ł��邪�Aas���Z�q�ł͂ł��Ȃ��B

�@�Ⴆ�΁A����2�‚̃N���X������Ƃ��悤�B�������Ȃ��N���X�uClassDoNothing�v�ƁAoperator�L�[���[�h�ɂ��ClassDoNothing�N���X�Ƃ̊ԂŌ^�ϊ����s���@�\���܂ރN���X�uClassImplicit�v���B

class ClassDoNothing {
}

class ClassImplicit {
  public static implicit operator
      ClassImplicit(ClassDoNothing src) {
    return new ClassImplicit();
  }
}


�@������2�‚̃N���X�ɑ΂��āA���̂悤�ȃR�[�h���L�q�����Ƃ���B

ClassDoNothing cdn = new ClassDoNothing();
ClassImplicit ci1 = cdn as ClassImplicit;


�@���������̃R�[�h�́Aas���Z�q�̌��Ŏ��̂悤�ȃG���[���������A�R���p�C���ł��Ȃ��Bas���Z�q�́A���[�U�[��`�ϊ������s���Ȃ����߂ł���B

�r���g�C���ϊ��ŁA�^ 'ClassDoNothing' �� 'ClassImplicit' �ɕϊ��ł��܂���B


�@����A���̂悤�ȃL���X�g���Z�q�́A���[�U�[��`�ϊ��ɂ��ϊ��”\�Ȃ̂ŁA���ɃG���[�ɂȂ炸�����”\�ł���B

ClassDoNothing cdn = new ClassDoNothing();
ClassImplicit ci2 = (ClassImplicit)cdn;


�@����1�‚̒��ӂ��Ă������������̂́A���̂悤�ȏꍇ�ł���B

ClassDoNothing cdn = new ClassDoNothing();
ClassImplicit ci3 = cdn;


�@���̑���ɂ́A�L���X�g���Z�q�������ϊ��Ɋւ���w����������Ă��Ȃ��B����ɂ�������炸�G���[�ɂȂ�Ȃ��̂́A�����Ŏg�p���Ă��郆�[�U�[��`�ϊ���implicit�L�[���[�h���g�����ÖٓI�ȕϊ��ł��邽�߂ł���B����ɂ�薳�֌W�ł���N���X�ԂŁA�L���X�g���Z�q�Ȃǂ��L�q���邱�ƂȂ�������”\�ɂȂ��Ă���̂��B�������A���̂悤�ȕϊ����”\�ł���󋵂ł��A��q�����悤��as���Z�q�ɂ��ϊ��̓G���[�ɂȂ�B���Ȃ킿�Aas���Z�q�̓��[�U�[��`�̕ϊ������s�����ƍ���ꍇ�Ɏg�p����ƗL�p�ł���B

���������x�̑���

�@�����܂ł̐����ŁA�L���X�g���Z�q�Ɣ�r����as���Z�q�͎��s�ł���@�\�����Ȃ����Ƃ��������肾�낤���B���̂��Ƃ́A�P�Ȃ�f�����b�g�΂���ł͂Ȃ��B���͋@�\�����Ȃ��������A�L���X�g���Z�q����as���Z�q��p�������������͍����ɂȂ�”\�������݂���B�ȉ��́A�L���X�g���Z�q���g�p�����ꍇ�ƁAas���Z�q���g�p�����ꍇ�̑��x���r����T���v���E�v���O�����ł���B

// castbench.cs

using System;

class CastBench {

  class Sample1 {
    public int n = 1;
  }

  class Sample2 {
  }

  private static int testCast(object [] testdata) {
    int sum = 0;
    foreach (object o in testdata) {
      try {
        sum += ((Sample1)o).n;
      } catch(InvalidCastException) {
        sum += 1;
      }
    }
    return sum;
  }

  private static int testAs(object [] testdata) {
    int sum = 0;
    foreach (object o in testdata) {
      Sample1 s = o as Sample1;
      if (s != null) {
        sum += s.n;
      } else {
        sum += 1;
      }
    }
    return sum;
  }

  private static int testIsCast(object [] testdata) {
    int sum = 0;
    foreach (object o in testdata) {
      if (o is Sample1) {
        sum += ((Sample1)o).n;
      } else {
        sum += 1;
      }
    }
    return sum;
  }

  public static void Main() {

    object [] testdata = new object[1000000];

    for (int i = 0; i < testdata.Length; i++) {
      if (i % 1000 != 0) {
        testdata[i] = new Sample1();
      } else {
        testdata[i] = new Sample2();
      }
    }
    DateTime startCast = DateTime.Now;
    for (int i = 0; i < 1000; i++) testCast(testdata);
    DateTime endCast = DateTime.Now;
    Console.WriteLine("�L���X�g�̎��s���� {0}", endCast - startCast);
    // �o�͗�F�L���X�g�̎��s���� 00:00:47.9899632

    DateTime startAs = DateTime.Now;
    for (int i = 0; i < 1000; i++) testAs(testdata);
    DateTime endAs = DateTime.Now;
    Console.WriteLine("as���Z�q�̎��s���� {0}", endAs - startAs);
    // �o�͗�Fas���Z�q�̎��s���� 00:00:11.7771696

    DateTime startIsCats = DateTime.Now;
    for (int i = 0; i < 1000; i++) testIsCast(testdata);
    DateTime endIsCast = DateTime.Now;
    Console.WriteLine("is���Z�q+�L���X�g�̎��s���� {0}", endIsCast - startIsCats);
    // �o�͗�Fis���Z�q+�L���X�g�̎��s���� 00:00:20.7702804
  }
}
// �R���p�C�����@�Fcsc castbench.cs

as�ƃL���X�g�̏������x�̈Ⴂ���݂�C#�̃T���v���E�v���O�����icastbench.cs�j
castbench.cs�̃_�E�����[�h

�@�R�����g�Ƃ��ăv���O�������ɖ��ߍ��񂾎��s���ʂ́A�M�҂̃R���s���[�^�iPentium4�^1.5GHz�̃V�X�e���j�Ŏ��s�����Ƃ��̂��̂ł���B���s����‹��ɂ���āA�\�������o�ߎ��Ԃ͕ω�����”\��������B

�@���̃T���v���E�v���O�����ł́ASample1�N���X��Sample2�N���X�̃C���X�^���X���܂�object�^�̔z���p�ӂ��Ă���B���̗�ł́A1000�‚�1�‚̊����ŁA�ϊ������s����f�[�^���܂߂Ă���B�����āASample1�N���X�Ȃ烁���o�ϐ��̒l�����Z���A����ȊO�Ȃ�1�����Z���鏈�����s�����\�b�h���A�L���X�g���Z�q��as���Z�q�Ŏ������Ă݂��B�v���O�����ł�3�p�^�[���̌v�����s���Ă���B�ŏ��̃p�^�[�����L���X�g���Z�q�ɂ���ĉ��Z�������s����A2�–ڂ̃p�^�[����as���Z�q�ɂ���ĉ��Z�������s����ł���B���s���ʂ����āA���҂̎��s���Ԃ��r����ƁAas���Z�q���g���������͂邩�ɍ����ł��邱�Ƃ�������B

�@�����ŁA��O�͏d�������ł����Ƃ��������ɋC�t�����ǎ҂́A�L���X�g���Z�q���g������͗�O���������Ă��邩��x���̂�������Ȃ��Ǝv������������Ȃ��B���ہA�ϊ��ł��Ȃ��f�[�^�̊����𑝂₹�Α��₷�قǁA�������Ԃ͑傫�������Ă��܂��̂ł���B�Ȃ�΁A��O���N���Ȃ��悤�ɏ�������΃L���X�g���Z�q���g���Ă��x���Ȃ�Ȃ���������Ȃ��A�ƍl����͓̂��R�̂��Ƃ��낤�B����ł͂Ƃ������ƂŁA�L���X�g���Z�q����O��is���Z�q�Ō^�𔻒肷��悤�ɂ����̂��A3�–ڂ̃p�^�[���ł���B���̕����Ȃ��O�͓������Ȃ��B�������A���s���ʂ�����ƕ�����Ƃ���A�m���ɃL���X�g���Z�q���g�������\�b�h�����͂邩�ɍ����ɂȂ������Aas���Z�q���g�������\�b�h�ɔ�ׂ�Ƃ��Ȃ�x���B���̗��R�́Ais���Z�q�ƃL���X�g���Z�q�ɂ���āA2����f�[�^�^�̃`�F�b�N�����邱�ƂɂȂ�A�����S�̂Ƃ��Ă͏d���Ȃ��Ă��܂������߂ł͂Ȃ����ƍl������B

�@�܂��A�ϊ��ł��Ȃ��f�[�^���܂������܂܂Ȃ��z���p�ӂ��Ď��s�����Ă��A�L���X�g���Z�q���g�����\�b�h�����Aas���Z�q���g�����\�b�h�̕�����⍂���ł���B�@�\�����Ȃ��������Aas���Z�q�̕������������”\�Ƃ������Ƃ��ł��邾�낤�B

�J�e�S���FC#�@�����ΏہF�^�ϊ�
�g�p�L�[���[�h�F�L���X�g���Z�q
�g�p�L�[���[�h�Fas���Z�q
�g�p�L�[���[�h�Fis���Z�q


�u.NET TIPS�v�̃C���f�b�N�X

�u.NET TIPS�v

Copyright© Digital Advantage Corp. All Rights Reserved.

�X�|���T�[����̂��m�点PR

���ڂ̃e�[�}

Microsoft �� Windows�őO��2025
AI for �G���W�j�A�����O
���[�R�[�h�^�m�[�R�[�h �Z���g���� by ��IT - IT�G���W�j�A���r�W�l�X�̒��S�Ŋ��􂷂�g�D��
Cloud Native Central by ��IT - �X�P�[���u���Ȕ\�͂�g�D��
�V�X�e���J���m�E�n�E �y�����i�r�zPR
���Ȃ��ɂ������߂̋L��PR

RSS�ɂ‚���

�A�C�e�B���f�B�AID�ɂ‚���

���[���}�K�W���o�^

��IT�̃��[���}�K�W���́A �������A���ׂĖ����ł��B���Ѓ��[���}�K�W�������w�ǂ��������B