c++ 网站开发,WordPress文章登录后可看,果合gohe网站建设,wordpress 本文内容
使用 C# 索引器实现 C# 的 is 和 as 关键字实现 C# 的 lock 关键字
本节中的主题介绍如何在 Visual C 中创建程序集#xff0c;这些程序集使用或提供以 C# 或 Visual Basic 编写的程序集的功能。
1、使用 C# 索引器
Visual C 不包含索引器#xff1b;它具有索引…本文内容
使用 C# 索引器实现 C# 的 is 和 as 关键字实现 C# 的 lock 关键字
本节中的主题介绍如何在 Visual C 中创建程序集这些程序集使用或提供以 C# 或 Visual Basic 编写的程序集的功能。
1、使用 C# 索引器
Visual C 不包含索引器它具有索引属性。 若要使用 C# 索引器请访问索引器就像它是索引属性一样。
示例
以下 C# 程序定义索引器。
// consume_cs_indexers.cs
// compile with: /target:library
using System;
public class IndexerClass {private int [] myArray new int[100];public int this [int index] { // Indexer declarationget {// Check the index limits.if (index 0 || index 100)return 0;elsereturn myArray[index];}set {if (!(index 0 || index 100))myArray[index] value;}}
}
/*
// code to consume the indexer
public class MainClass {public static void Main() {IndexerClass b new IndexerClass();// Call indexer to initialize elements 3 and 5b[3] 256;b[5] 1024;for (int i 0 ; i 10 ; i)Console.WriteLine(Element #{0} {1}, i, b[i]);}
}
*/此 C/CLI 程序使用索引器。
// consume_cs_indexers_2.cpp
// compile with: /clr
#using consume_cs_indexers.dll
using namespace System;int main() {IndexerClass ^ ic gcnew IndexerClass;ic-default[0] 21;for (int i 0 ; i 10 ; i)Console::WriteLine(Element #{0} {1}, i, ic-default[i]);
}此示例产生以下输出
Element #0 21
Element #1 0
Element #2 0
Element #3 0
Element #4 0
Element #5 0
Element #6 0
Element #7 0
Element #8 0
Element #9 0
Element #10 02、实现 C# 的 is 和 as 关键字
本主题演示如何在 Visual C 中实现 C# 的 is 和 as 关键字的功能。
示例
// CS_is_as.cpp
// compile with: /clr
using namespace System;interface class I {
public:void F();
};ref struct C : public I {virtual void F( void ) { }
};template class T, class U
Boolean isinst(U u) {return dynamic_cast T (u) ! nullptr;
}int main() {C ^ c gcnew C();I ^ i safe_cast I ^ (c); // is (maps to castclass in IL)I ^ ii dynamic_cast I ^ (c); // as (maps to isinst in IL)// simulate as:Object ^ o f;if ( isinst String ^ (o) )Console::WriteLine(o is a string);
}输出结果
o is a string3、实现 C# 的 lock 关键字
本主题演示如何在 Visual C 中实现 C# lock 关键字。
示例
// CS_lock_in_CPP.cpp
// compile with: /clr
using namespace System::Threading;
ref class Lock {Object^ m_pObject;
public:Lock( Object ^ pObject ) : m_pObject( pObject ) {Monitor::Enter( m_pObject );}~Lock() {Monitor::Exit( m_pObject );}
};ref struct LockHelper {void DoSomething();
};void LockHelper::DoSomething() {// Note: Reference type with stack allocation semantics to provide// deterministic finalizationLock lock( this );// LockHelper instance is locked
}int main()
{LockHelper lockHelper;lockHelper.DoSomething();return 0;
}